我想在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':找不到指定的模块
答案 0 :(得分:0)
您需要将DLL存储在调试文件夹中。 并尝试此命令以检查该方法是否正确导出
connect-history-api-fallback
答案 1 :(得分:-1)
你必须检查dll和exe的目标平台。
编辑:当目标不同时,例外是 BadImageFormatException
当找不到dll或 其中一个依赖项 时,您将拥有 DllNotFoundException 。
例如,当您使用VisualStudio编译DLL的调试版本时,它需要调试运行时(没有安装在没有IDE的计算机上)。
您可以使用Dependency Walker
检查您的dll依赖项此工具还可以帮助您查看目标系统(x86 / x64)和导出的函数(在dll上使用它,程序不会显示[DllImport]依赖项)