【问题标题】:Calling C++ DLLs from ASP.NET 4从 ASP.NET 4 调用 C++ DLL
【发布时间】:2014-07-25 07:01:34
【问题描述】:

我正在尝试从 ASP.NET 4.0 Web 应用程序调用 C++ DLL,但不断收到 DLL 导入错误 - 无法加载库“库名称”

我阅读了很多博客,其中开发人员遇到了相同的问题,并且似乎对大多数人有用的是将非托管 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# c++ asp.net asp.net-mvc-4 iis


【解决方案1】:

因此,经过数周的努力,我想出了一个解决方法。我正在实施的集成是用于信用卡处理。除了 C++ DLL,它们还有一个名为 system.dna 的已编译配置文件,我怀疑当您将包含互操作 DLL 的文件夹添加到 PATH 环境变量时,它不会获取 system.dna 文件。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 2012-03-04
    相关资源
    最近更新 更多