无法加载dll

DLLimport unable to load dll

本文关键字:dll 加载      更新时间:2023-10-16

我在cpp中使用一个非托管的dll,我从我的c# web项目中调用它。它在我的本地主机上工作得很好,但在我的共享主机winhost上根本不起作用。当我尝试使用dll中的一个函数时,就会发生这种情况。

我得到的错误信息是:

"无法加载DLL 'dllTest.dll':应用程序启动失败因为它的并排配置是不正确的。请参阅应用程序事件日志或使用命令行sxstrace.exe工具获取更多细节。(来自HRESULT的例外:0 x800736b1)"、"错误":[{" name ":"DllNotFoundException"、"消息":"不能加载DLL 'dllTest.dll':应用程序启动失败,原因是它的并排配置不正确。请参阅应用程序事件日志或使用命令行sxstrace.exe工具获取更多细节。(来自HRESULT: 0x800736B1的异常)"}]}

我怀疑这是路径问题。有问题的dll dllTest.dll位于我的bin文件夹中。我不确定它在哪里搜索dll,但有一种方法,我可以为dll的搜索指定路径。我找不到一种方法来指定dll的相对路径。

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

还是没有其他原因?

谢谢你的帮助。

问题是您的c++ DLL需要安装CRT库才能工作。错误消息的粗体部分给出了提示:

无法加载DLL 'dllTest.dll': 应用程序启动失败,因为它的并行配置不正确。请查看应用程序事件日志或使用命令行sxstrace.exe工具获取更多详细信息。

这就解释了为什么在您的开发机器上一切正常——它们已经安装在那里了,因为它们是与您的开发工具一起安装的;以及为什么它不能在没有安装CRT可重新发行版的生产服务器上工作。

您需要下载用于编译DLL的Visual Studio版本的适当的可重新发布包。例如,如果你使用的是Visual Studio 2010,你可以在这里下载10版的CRT。

或者,您可以用静态链接的运行时库编译DLL。要做到这一点,更改您的项目属性以抛出/MT开关而不是/MD —(它在UI中的"配置属性"->"C/c++"->"代码生成"->"运行时库"中找到)。