Asp.net C#调用非托管C++ DLL问题
各位牛人请进来解答,问题是这样的,我们公司有个C#语言开发的一个WEB网站,这个网站要调用另外一个供应商提供的API接口,几个DLL文件,但是他们的DLL文件是C++写的...
各位牛人请进来解答,问题是这样的,我们公司有个C#语言开发的一个WEB网站,这个网站要调用另外一个供应商提供的API接口,几个DLL文件,但是他们的DLL文件是C++写的,而且经过封装已经成为托管DLL,我们拿过来在控制台程序中可以正常调用,但是在asp.net的网站中引用就不行,提示找不到依赖项。现在问题已经可以确认,因为他们提供了好几个DLL,我们调用的DLL引用了其他C++的非托管的DLL,而Asp.net网站运行的时候,仅仅把封装好的托管DLL拷贝到C盘运行的临时目录下,非托管的却还在网站Bin目录下,因此运行时找不到依赖项,我尝试找到临时目录,提前将所有非托管DLL拷贝过去再运行,发现一切正常,所以问题肯定就是这个原因导致的。 关于解决方案,我尝试了很多方法,如将所有DLL文件放在System32目录下运行,或者在计算机的环境变量和Global.asax中配置环境变量,这些百度上搜的方法基本都试过,无奈都不能解决问题,以下提供我最近找到的一个解决方案给大家提供思路,希望大家多多帮忙,谢谢了!!! http://www.cnblogs.com/yeahgis/archive/2011/11/12/2246341.html
展开
2个回答
展开全部
可以使用 DllImport,指定绝对路径。
追问
我项目中要引用的C++ Dll有5个,1个是封装成为托管的,其余4个都是非托管的,请问用DllImport要怎么操作?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接引用托管的Dll就可以了撒!!右击引用就是了
既然别个都封装好了
既然别个都封装好了
更多追问追答
追问
有其他非托管DLL,直接引用是肯定不行的,真那么简单我也就不用提问了,哈哈
追答
楼主,你想多了,难道你还不明白吗?别人为什么要给你一个托管的DLL和几个非托管的dll,如果我是开发者,需要你自己调用的话,直接给你的非托管的就是了,还给你托管的dll,要是我用的是java的话,那托管的dll我又怎么用呢?
别人给了你托管的DLL了,那么就意味着,这托管的DLL里面已经引用其他的非托管的DLL,已经给你封装好了,你只需要引用托管的进来的就是了,将所有的dll放在bin目录下,然后在工程中右击引用托管的dll就可以了,其他的就不要管了,至于你说找不到的话,你可以用dll赖查看器看看是否缺少系统dll。
当然如果别人没有给你封装或者给你的托管的dll不是调用其他的非托管的dll,那么就需要自己使用[DllImport 路径]方式来引出导出函数来处理了,既然你控制台没用到这个,说明托管的dll就是一个调用封装!!
希望你在笑别人的时候你得先谦虚和有自知之明!!
好吧,如果你认为我想简单了,就当我放屁咯!!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询