无法从C#.NET加载Win32本机DLL文件

时间:2011-01-11 07:44:47

标签: c# winapi dll

我有一个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(...)
}

我该怎么办?

3 个答案:

答案 0 :(得分:5)

部署具有本机依赖关系的.Net应用程序时的一个常见问题是本机dll本身可能在目标计算机上缺少依赖关系,例如正确版本的C运行时。

使用Dependency Walker之类的工具来分析您的原生dll,并确定它是否对您复制它的机器缺少依赖。

答案 1 :(得分:1)

尽量不要对DllImport属性参数中指定文件名的任何路径进行硬编码。那么除了可执行文件之外,你应该让文件正确。

这样的事情:

[DllImport("user32.dll", CharSet = CharSet.Unicode)]

答案 2 :(得分:1)

将DLL移动到根目录。如果可行,请查看您的属性以确定原因。您尚未发布任何代码,因此我无法向您提供任何具体原因。