从ASP.NET 4调用C ++ DLL

丹尼斯·韦塞尔斯

我正在尝试从ASP.NET 4.0 Web应用程序调用C ++ DLL,但始终出现DLL Import错误-无法加载库'Library name'

我读过很多博客,在这些博客中,开发人员都遇到过同样的问题,并且对于大多数人来说似乎有用的是在添加非托管DLL到PATH环境变量的路径。

我已经在服务器上完成了同样的操作,并两次检查了三遍,以确保我正确分割了路径,并且C ++ DLL位于该文件夹中,但是当我在浏览器中查看应用程序时,仍然遇到相同的错误。在代码中放置了日志记录,它肯定来自调用非托管DLL的代码部分。

以下是有关我的环境的一些信息:

  1. Windows Server 2003
  2. IIS 6.0
  3. .NET Framework 4.0
  4. ASP.NET MVC 4.0
  5. 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环境变量中时,它没有选择system.dna文件。

作为一种解决方法,我创建了一个WCF服务,该服务作为Windows服务安装在服务器上,并且将用于付款的逻辑放入该服务中,并且Web应用程序仅与该服务进行了对话。希望这对其他正在面对的开发人员有所帮助同样的问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章