从ASP调用c++ dll.净4
本文关键字:dll c++ ASP 调用 | 更新日期: 2023-09-27 18:15:01
我试图从ASP调用c++ DLL。. NET 4.0 web应用程序,但一直得到DLL导入错误-无法加载库'库名'.
我读过很多博客,其中开发人员遇到了同样的问题,似乎对大多数人有效的是将非托管dll的路径添加到PATH
环境变量
我在服务器上做了同样的事情,并且双重,三重检查我正确地分割了路径,并且c++ dll在该文件夹中,但当我在浏览器中查看应用程序时,我仍然得到同样的错误。我已经在代码中放置了日志记录,它肯定来自调用非托管DLL的代码部分。
这里是一些关于我的环境的信息:
- Windows Server 2003
- IIS 6.0
- 。. NET Framework 4.0
- ASP。Net MVC 4.0 c#
在开发机器上,如果我将非托管dll复制到C:'Program Files'IIS Express
,它就会工作。尝试将c++ dll复制到bin文件夹,但据我所知,ASP。. NET在执行代码时将dll从inetpub'wwwroot'sitename'bin中的bin文件夹复制到动态位置,但此过程不包括非托管dll。有什么建议吗,我还可以试试?
编辑:就代码而言,它与任何其他互操作代码完全相同,我有一个包装器类,其中我使用DllImport定义所有所需的函数调用,并在我的代码中创建包装器的新实例并调用所需的函数。正如我提到的,只要c++ dll在IISExpress文件夹中,这在开发机器上就可以正常工作,但当我部署到服务器时,它会抛出上述错误:
[DllImport("My3rdparty.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int myfunction(int handle, int* response, int timer);
所以经过几周的努力,我想出了一个解决办法。我所实现的集成是针对信用卡处理的。除了c++ dll,它们还有一个编译后的配置文件system。dna和我的怀疑是,当您将包含互操作dll的文件夹添加到PATH环境变量时,它不会拾取系统。dna文件。
作为一种解决方法,我创建了一个WCF服务,它作为Windows服务安装在服务器上,我已经将支付的逻辑放置到该服务中,web应用程序只是与该服务对话。我希望这能帮助其他面临同样问题的开发人员