【发布时间】:2011-01-11 07:44:46
【问题描述】:
我有一个 C# winapp。我从 C# 应用程序中调用了一个本地 .dll 文件(我自己用 C++ 创建),它工作正常。
但是当我将我的应用程序(.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(...)
}
我该怎么办?
【问题讨论】:
-
请在您的 C# 代码中发布您的
<DllImport>声明。 -
我编辑了帖子,也写了 C# dll 导入代码。
-
我注意到您的代码仍然硬编码 C:\ 目录中 DLL 的路径。正如其他答案所暗示的那样,没有理由这样做。应用程序将自动加载与可执行文件位于同一目录中的 DLL。您只需要文件名。
-
问题不在于路径和文件名。它是 .dll 依赖项。我的 dll 使用 MSVCR100.dll 中的一些函数,默认情况下这些函数不在 windows\system32 文件夹中。我复制了缺失的 dll,它工作正常。
-
是的,chibacity 已经将其作为您的问题(顺便说一句,您应该接受他的回答——单击左侧空白处的空心复选标记)。我只是补充一点,在应用程序的源代码中硬编码 DLL 的路径并不是一种好的做法。它们的最佳位置是您的应用程序的目录,如果您省略路径规范,它将首先检查那里。很高兴看到您解决了问题。