在我的C# Wpf项目中,我需要一些来自C++的功能。因此,我创建了自己的C++ DLL项目,名为LibC。而Wpf应用程序可以在我的电脑中正常运行。但是在测试者的电脑上,日志上写着:
Unable to load DLL 'LibC.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)我检查了DLL文件LibC.dll在那里。通过查看这篇文章:无法加载DLL (无法找到模块HRESULT: 0x8007007E)
Anthony Hayward的答案激发了我的灵感。所以我在dumpbin命令下运行,发现我的dll依赖于这4个窗口的dll。在测试器的计算机上,缺少了两个:vcruntime140d.dll和ucrtbased.dll。在我的计算机上,可以找到所有的四个dll。所以我将缺失的两个dll复制到测试人员的计算机上,并将它们与我的LibC.dll放在一起,然后这个应用现在运行良好。
我的问题是如何更好地解决这类问题?如前所述,我手动将缺失的dll文件复制到测试人员的计算机上。
另一个选项是将这两个dll放到我的项目中,并与我的项目文件一起释放它们,包括exe文件和LibC.dll文件。
是否可以静态地将两个缺失的dll链接到我的LibC.dll中?或者其他建议?
"c:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\vc\Tools\MSVC\14.29.30133\bin\Hostx64\x64\dumpbin.exe" /DEPENDENTS libc.dll
Microsoft (R) COFF/PE Dumper Version 14.29.30143.0
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file libc.dll
File Type: DLL
Image has the following dependencies:
KERNEL32.dll
USER32.dll
VCRUNTIME140D.dll
ucrtbased.dll
Summary
1000 .00cfg
1000 .data
2000 .idata
1000 .msvcjmc
3000 .pdata
4000 .rdata
1000 .reloc
1000 .rsrc
A000 .text
10000 .textbss发布于 2022-06-08 12:52:28
您的用户将需要安装可视化c++运行库。这样做的典型方法是使用一个静默执行此操作的安装程序。据我所知,它们不能编译到您的程序中,而且许可证禁止在重新分配包之外分发丢失的dll。
请注意,如果更新用于编译dll的Visual版本,则可能需要更新此包。
还请注意,您需要部署应用程序的发行版构建,因为dll的调试版本仅作为visual studio的一部分分发。
最后,纯.Net代码没有这类问题,所以如果您有c++代码,最好用c#重写它。如果您想访问某个第三方dll,最好直接对该dll使用P/Invoke。
https://stackoverflow.com/questions/72545760
复制相似问题