我在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只是一个简单的测试,它只包含一个简单的添加函数。
或者不可能是其他原因?
感谢您的帮助。
答案 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 ++” - >“代码生成”中找到它) “ - >”运行时库“)。