DLLimport无法加载DLL

时间:2011-07-16 08:03:01

标签: c# c++ dll interop dllimport

我在cpp中使用了一个非托管dll,我从我的C#web项目中调用它。它在我的本地主机上工作正常,但根本无法在我的共享主机winhost上运行。当我尝试使用dll中的一个函数时会发生这种情况。

我收到的错误消息是:

  

“无法加载DLL'ldTest.dll':应用程序无法启动   因为它的并排配置不正确。请看看   应用程序事件日志或使用命令行sxstrace.exe工具   更多详情。 (HRESULT的例外情况:   0x800736B1) “ ”错误“:[{ ”名称“: ”DllNotFoundException“, ”消息“:” 无法   加载DLL'ldTest.dll':应用程序无法启动,因为   它的并排配置不正确。请看看   应用程序事件日志或使用命令行sxstrace.exe工具   更多详情。 (来自HRESULT的异常:0x800736B1)“}]}

我怀疑这是一个路径问题。有问题的dll,dllTest.dll放在我的bin文件夹中。我不知道它在哪里搜索dll但有没有办法我可以指定搜索dll的路径。我找不到指定dll相对路径的方法。

我不认为这是一个依赖性问题,因为我的dllTest.dll只是一个简单的测试,它只包含一个简单的添加函数。

或者不可能是其他原因?

感谢您的帮助。

1 个答案:

答案 0 :(得分:13)

问题是你的C ++ DLL需要安装CRT库才能工作。错误消息的粗体部分是为您提供的提示:

  

无法加载DLL“dllTest.dll”:应用程序无法启动,因为其并排配置不正确。请参阅应用程序事件日志或使用命令行sxstrace .exe工具了解更多细节。

这解释了为什么你的开发机器上的一切都很好 - 它们已经安装在那里,因为它们已经安装了你的开发工具 - 以及为什么它不能在没有CRT可再发行组件的生产服务器上运行安装。

您需要为编译DLL的Visual Studio版本下载相应的可再发行组件包。例如,如果您使用的是Visual Studio 2010,则可以下载CRT可再发行组件here的第10版。

或者,您可以使用运行时库静态链接来编译DLL。为此,请更改项目属性以抛出/MT开关而不是/MD - (可在UI中的“配置属性” - >“C / C ++” - >“代码生成”中找到它) “ - >”运行时库“)。