使用 C++ dll 运行 c# 应用程序会生成无法加载异常

Running c# application with C++ dll generates unable to load exception

本文关键字:加载 异常 dll C++ 运行 应用程序 使用      更新时间:2023-10-16

我正在尝试让一个简单的C/C++ dll在.net(Visual Studio 2017与框架4.x(中工作,但我得到的只是:

System.DllNotFoundException:"无法加载 DLL 'OurDll.dll":找不到指定的模块。(HRESULT的例外:0x8007007E('

我正在使用这里的示例 dll(它包括下载到源代码和完整的二进制构建(: https://www.c-sharpcorner.com/uploadfile/tanmayit08/unmanaged-cpp-dll-call-from-managed-c-sharp-application/

但为了方便起见,dll 就是这样:

#include <stdio.h>
extern "C"  
{
__declspec(dllexport) int add(int a,int b) 
{
return a+b;
}
__declspec(dllexport) int subtract(int a,int b) 
{
return a-b;
}
}

它是一个 32 位 dll,如项目所示: 条件="'$(配置(|$(平台('=='发布|Win32'">

c# 代码如下:

[DllImport("OurDll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int subtract(int a, int b);
  • dll 设置为与程序一起导出,它位于包含可执行文件的文件夹中。
  • 我也明确制作了程序 x86
  • 我什至使用了他们的示例 bin 文件夹,但它不起作用

所以我认为在 2010 年至 2018 年之间,:)发生了一些变化,例如我在 64 位上,但我认为创建一个 x86 应用程序或从他们的二进制文件运行它会解决这个问题......

我也尝试将完整路径放入,因此它不是有问题的路径,并且从搜索互联网来看,它不是其他外部链接的dll。

我什至使用corflags将所有内容显式设置为32位 任何帮助将不胜感激。

解决了这个问题。该C++是使用/MD 和 Visual Studio 2015 编译的。除了 2015 年之外,我只有所有版本的运行时。使用/MT 静态编译修复了它。

因此,一般要点是您需要安装 c++ 运行时库,或者使用运行时静态编译代码以使其工作。

感谢您的帮助。希望这可能会对某人有所帮助。