为什么我的C#应用​​程序无法加载我的C ++ DLL?

时间:2017-07-22 10:38:56

标签: c# c++ .net dll file-not-found

我想在C#应用程序中使用C ++代码,所以我用C ++编写了一个DLL。 因为这是我第一次创建C ++ DLL,所以我开始创建一个'test'dll'。这是代码

extern "C"
{
    __declspec(dllexport) void DisplayHelloFromDLL()
    {
        printf("Hello from DLL !\n");
    }
}

我做了一个非常简单的C#应用​​程序:

class DllTest {
    [DllImport("Test.dll")]
    public static extern void DisplayHelloFromDLL();

    public static void UseDll() {
        DisplayHelloFromDLL();
    }
}

之后,我构建了两个应用程序并将可执行文件和dll移动到同一文件夹中。但是当我运行可执行文件时,它显示以下消息:

  

未处理的异常:System.DllNotFoundException:无法加载DLL'Test.dll':找不到指定的模块

2 个答案:

答案 0 :(得分:0)

您需要将DLL存储在调试文件夹中。 并尝试此命令以检查该方法是否正确导出

connect-history-api-fallback

答案 1 :(得分:-1)

你必须检查dll和exe的目标平台。

编辑:当目标不同时,例外是 BadImageFormatException

当找不到dll或 其中一个依赖项 时,您将拥有 DllNotFoundException

例如,当您使用VisualStudio编译DLL的调试版本时,它需要调试运行时(没有安装在没有IDE的计算机上)。

您可以使用Dependency Walker

检查您的dll依赖项

此工具还可以帮助您查看目标系统(x86 / x64)和导出的函数(在dll上使用它,程序不会显示[DllImport]依赖项)