使用 C++ dll 运行 c# 应用程序会生成无法加载异常
Running c# application with C++ dll generates unable to load exception
我正在尝试让一个简单的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++ 运行时库,或者使用运行时静态编译代码以使其工作。
感谢您的帮助。希望这可能会对某人有所帮助。
相关文章:
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- 为什么我尝试在 OpenGL 中加载的 3ds 文件会出现此未经处理的异常?
- 使用 OpenGL 加载图像时0x69ABF340 STBI_Image引发异常
- 使用 C++ dll 运行 c# 应用程序会生成无法加载异常
- 加载C DLL文件时,如何修复异常_access_violation
- 使用ACE_dll动态加载客户端C++dll,错误为未处理的异常
- OPENCV_使用OpenCV2的加载图像中的异常
- 当应用程序在不同系统上运行时,无法加载DLL异常
- 如何在 Java 中加载 cpp 库时避免异常
- 在 C# 中加载 COM 对象会引发异常"无法将类型'System.__ComObject'的 COM 对象强制转换为接口类型...",但C++或 VB 不会
- 从新发行版和不同发行版加载LD_PRELOAD libstdc++.so.6和libc.so.6时出现浮点异常
- 从 C# 加载C++ Windows 运行时组件时出现异常
- 处理文件和图像加载异常的最佳方法是什么?
- 手动加载的DLL中的异常处理
- 多次加载属性树xml解析器异常
- Boost序列化加载失败并引发异常
- 无法加载DLL.找不到指定的模块.(异常来自HRESULT: 0x8007007E)
- 在加载的共享库中捕获异常