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

Why can't my C# application load my C++ dll?

本文关键字:我的 C++ dll 加载 应用程序 为什么      更新时间:2023-10-16

我想在 C# 应用程序中使用C++代码,所以我用 C++ 编写了一个 DLL。 因为这是我第一次创建C++ DLL,所以我从创建一个"测试"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 移动到同一个文件夹中。但是当我运行可执行文件时,它显示以下消息:

未处理的异常: 系统.DllNotFound异常: 无法加载 DLL"测试.dll": 找不到指定的模块

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

dumpbin /exports Test.dll

您必须检查DLL和exe的目标平台。

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

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

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

可以使用依赖项查看器检查 DLL 依赖项

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