我有一个C#winapp。我从C#app调用了一个原生.dll文件(由我自己创建),它工作正常。
但是当我将我的应用程序(.exe和.dll文件)复制到另一台机器时,我收到一条错误消息:
无法加载DLL“c:\ dllname.dll”:找不到指定的模块。 (HRESULT异常:0x8007007E)
这是C#代码:
class IsoMessageHelper
{
public const string ISO8583_DLL = "c:\\Hc8583.dll";
[DllImport(ISO8583_DLL, CallingConvention = CallingConvention.Cdecl)]
public static extern bool InitializationRq(...)
}
我该怎么办?
答案 0 :(得分:5)
部署具有本机依赖关系的.Net应用程序时的一个常见问题是本机dll本身可能在目标计算机上缺少依赖关系,例如正确版本的C运行时。
使用Dependency Walker之类的工具来分析您的原生dll,并确定它是否对您复制它的机器缺少依赖。
答案 1 :(得分:1)
尽量不要对DllImport
属性参数中指定文件名的任何路径进行硬编码。那么除了可执行文件之外,你应该让文件正确。
这样的事情:
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
答案 2 :(得分:1)
将DLL移动到根目录。如果可行,请查看您的属性以确定原因。您尚未发布任何代码,因此我无法向您提供任何具体原因。