2011-01-11 32 views
0

加载Win32本地DLL文件我有一个C#winapp。我从C#应用程序调用一个本地.dll文件(由我自己创建),并且它工作正常。无法从C#.NET

但是,当我在我的应用程序(.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

安置自己的``从你的C#代码的声明,请。 – 2011-01-11 08:11:53

+0

我编辑了这篇文章,并编写了C#dll导入代码。 – losingsleeep 2011-01-11 08:14:24

+0

我注意到你的代码仍然硬编码到C:\目录中DLL的路径。正如其他答案所建议的那样,没有理由这样做。应用程序将自动加载与其可执行文件放在同一目录中的DLL。所有你需要的是文件名。 – 2011-01-11 08:41:38

回答

5

部署具有原生的依赖.Net应用程序时的一个共同问题,就是本地的dll可以在目标计算机上进行例如缺少依赖自己C运行时的正确版本。

使用这种Dependency Walker一个工具来分析您的本机DLL,并确定它是否有您已经复制过它在机器上丢失的依赖。

1

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

事情是这样的:

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

移动的DLL到根。如果这样做,然后看看你的属性,以确定为什么。你还没有发布任何代码,所以我不能给你任何具体的原因。