首页 > 代码库 > C#调用C++ dll导出函数提示找不到指定模块
C#调用C++ dll导出函数提示找不到指定模块
在X64系统上,用VS2013编写了一个C++动态链接库,里面提供了一个导出函数SGFYS。
编译为DLL之后,我们用C#对其动态链接库进行调用,调用代码如下:
此时会被提示,试图加载不正确的格式。我们对该.NET项目属性进行配置,右键该项目--属性--生成--目标平台修改为(x86)
之后再次调用,已经可以被正确调用。
此时我们将该程序放到XP下运行,会报错“找不到指定模块”。
我们用 Dependency walker加载该DLL,发现缺少依赖MSVCR120D.DLL
导致上述问题的原因是运行库动态编译和静态编译的问题。dll动态加载有个好处,它可以减少生成的exe文件的体积,但是缺点就是如果对应的系统环境变量或者exe所在的目录里面找不到其所需要的dll文件的话,程序就会拒绝执行。而静态编译就是把所有需要的库都静态编译到exe文件里面,这样就可以在所有的系统平台上都能运行,但它也有一个缺点,就是生成的exe文件因为已经带了部分库的代码,所以体积会相对动态编译出来的exe大(具体大多少要根据库的内容才能确定)。
解决方法:
右击相应的项目,选择“属性”,在项目属性页中的“配置属性”下面的“C/C++”下面的“代码生成”一项,由默认的“多线程调试DLL(/MDd)”,改成“多线程 (/MT)”,确定之后,重新生成项目即可。这样所得的exe文件就是静态编译了。
C#调用C++ dll导出函数提示找不到指定模块
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。