我正在尝试从ASP.NET 4.0 Web应用程序调用C ++ DLL但仍然遇到 DLL导入错误 - 无法加载库'库名'。
我已经阅读了很多博客,其中开发人员经历了相同的探测,对大多数人来说似乎正在起作用的是添加非托管DLL到PATH
环境变量
我在服务器上做了同样的事情并且双重检查我检查到我正确地剥离了路径并且C ++ DLL在该文件夹中但是当我在浏览器中查看应用程序时我仍然得到相同的错误。我已经在代码中放置了日志,它肯定来自调用非托管DLL的代码部分。
以下是有关我的环境的一些信息:
在dev机器上,如果我将未管理的DLL复制到C:\ Program Files \ IIS Express
,它可以工作尝试将C ++ DLL复制到bin文件夹但据我所知,ASP.NET在执行代码时将inetpub \ wwwroot \ sitename \ bin中的bin文件夹中的DLL复制到动态位置,但此过程不包括关于我还能尝试什么的任何建议?
修改
就代码而言,它与任何其他互操作代码完全相同,我有一个包装类,我使用DllImport定义所有必需的函数调用,在我的代码中,我创建了一个新的包装器实例并调用所需的函数。正如我所提到的,只要C ++ DLL是我的IISExpress文件夹,这在dev机器上运行正常,但当我部署到服务器时,它会抛出上述错误:
[DllImport("My3rdparty.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int myfunction(int handle, int* response, int timer);
答案 0 :(得分:0)
经过几周的挣扎,我想出了一个解决方案。我正在实施的集成是用于信用卡处理。除了C ++ DLL,它们还有一个名为system.dna的已编译配置文件,我怀疑当你将包含互操作DLL的文件夹添加到PATH环境变量时,它不会获取system.dna文件。
作为一种解决方法,我创建了一个WCF服务,该服务作为Windows服务安装在服务器上,我已经为这项服务付款,而Web应用程序只是与服务进行对话。我希望这有助于其他面临同样问题的开发人员