我在 cpp 中使用非托管 dll,从我的 C# Web 项目中调用它。它在我的本地主机上运行良好,但在我的共享主机 winhost 上不起作用。当我尝试使用 dll 中的函数之一时会发生这种情况。
我收到的错误消息是:
“无法加载 DLL 'dllTest.dll':应用程序启动失败 因为它的并行配置不正确。请参阅 应用程序事件日志或使用命令行 sxstrace.exe 工具 更多细节。 (HRESULT 的异常: 0x800736B1)","错误":[{"名称":"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,则可以在此处下载 CRT 可再发行版本 10。
或者,您可以使用静态链接的运行时库来编译 DLL。为此,请更改项目属性以抛出/MT
开关而不是 /MD
(可在 UI 中的“配置属性”->“C/C++”->“代码生成”->“运行时库”下找到) ”)。或使用
dumpbin
dumpbin /DEPENDENTS <my.dll>