无法在C#中加载64位DLL错误

时间:2013-04-26 07:18:16

标签: c++ visual-studio-2010 c#-4.0 visual-c++ dllimport

我有64位c ++ ddl,我必须在我的c#应用程序中使用它。我用它像

[DllImport("sampleDll.dll",
    EntryPoint = "sampleFunction",
    CharSet = CharSet.Ansi,
    CallingConvention = CallingConvention.StdCall)]
    public static extern int sampleFunction(char[] ch, int i);

但是当我尝试运行应用程序时,它显示错误为

“无法加载DLL'sampleDll.dll':找不到指定的模块。”

我使用的是64位操作系统。我试过将dll复制到System32文件夹

但我仍然得到同样的错误。

请让我知道此问题的解决方法........

2 个答案:

答案 0 :(得分:2)

我将假设你的C#进程是64位。如果它是32位进程,则无法加载64位DLL,这就是失败的原因。

如果您将文件复制到system32,则会看到64位进程。如果您复制的文件名为sampleDll.dll,那么您的程序将找到它。所以,如果你看到

Unable to load DLL 'sampleDll.dll': The specified module could not be found.

问题不在于无法找到sampleDll.dll,而是无法解析其依赖关系。对此最常见的解释是您需要安装sampleDll.dll依赖的C运行时。请参阅此DLL的文档以了解其依赖关系。如果它是你自己制作的DLL,那么你就知道你在构建它时使用了什么,并且可以自己辨别出依赖关系。

最后,我要强调你不应该将文件复制到system32目录中。这属于系统,你不应该触摸它。 DLL驻留的最佳位置与加载它的可执行文件位于同一目录中。

答案 1 :(得分:-1)

将您的dll放在部署应用程序的同一文件夹中。