从ASP.NET 4调用C++ DLLs

4
我正在尝试从ASP.NET 4.0 Web应用程序中调用一个C++ DLL,但一直出现一个“DLL导入错误 - 无法加载库'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在执行代码时将从inetpub \ wwwroot \ sitename \ bin中的bin文件夹复制DLL到动态位置,但此过程不包括未托管的DLL。您有什么其他建议吗?

编辑:

就代码而言,它与任何其他相互操作代码完全相同,我有一个包装器类,在其中使用DllImport定义了所有所需的函数调用,并在我的代码中创建了一个包装器的新实例并调用所需的函数。正如我所提到的,只要C ++ DLL位于IISExpress文件夹中,它就可以在开发机器上很好地工作,但是当我部署到服务器时,它会抛出上述错误。

[DllImport("My3rdparty.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int myfunction(int handle, int* response, int timer);

请提供您正在使用的访问库的代码。 - Savvas Kleanthous
请展示给我们代码。 - Naseef Chowdhury
1个回答

0
经过数周的挣扎,我想出了一个解决方法。我正在实现的集成是用于信用卡处理的。除了 C++ DLLs 之外,他们还有一个名为 system.dna 的编译配置文件。我的怀疑是,当您将包含 interop DLLs 的文件夹添加到 PATH 环境变量时,它不会捕获 system.dna 文件。
作为一种解决方法,我创建了一个 WCF 服务,该服务安装为服务器上的 Windows 服务,并将执行付款逻辑放入此服务中,Web 应用程序只需与服务通信。希望这可以帮助其他面临相同问题的开发人员。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接