C#无法调用C++编的DLL

开发环境:VS2013C#做界面,C++写DLL。C#部分运行正常,一旦调用C++的DLL就弹错。无法加载DLL“XXX.dll”:找不到指定的模块。(异常来自HRESU... 开发环境:VS 2013
C#做界面,C++写DLL。

C#部分运行正常,一旦调用C++的DLL就弹错。
无法加载 DLL“XXX.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
Win7、Win7 SP1=》x86、x64都测试过,错误一样。

ClickOnce打包,把
vcredist_x86
vcredist_x64
DotNetFX45
WindowsInstaller4_5 (8个文件)
这4个包里的东西都装了,还是不行。
Windows Kits也装了,还是不行。
最后只好装了个VS 2013,正常了。

这个问题以前用VS 2008开发时也出现过,解决办法是装了个VS 2008……
总不能为了运行几百K的程序,就得带个2G多的开发环境吧?

到底是缺少什么运行库呢?
展开
 我来答
匿名用户
推荐于2017-09-16
展开全部
就跟你说一下吧,你这种是缺少DLL依赖的mainifest导致的;为什么你安装了vcredist还不行,这是因为从VC2005-VC2008,CRT和MFC库都有好几个版本,你们开发用的版本跟你安装的vcredist是不同的版本

那怎么解决这个问题,很简单,从你的开发机器上(就是编译C++ DLL那个开发机)复制对应的DLL就行了,DLL在Program Files\Microsoft Visual Studio 9.0\VC\redist\x86这个目录下,一般只需要复制CRT下的文件就行了(注意,要全部复制,除了DLL外还有一个叫Microsoft.VC90.CRT.manifest的文件);如果你的DLL用到了MFC,那么就复制Microsoft.VC90.MFC目录下的所有文件;把这些文件跟你的C++ DLL放在同一个目录就行了

其它版本的也一样;从VS2010开始,微软就取消了mainifest了,所以只需要把运行时库,即DLL复制到目标机器上即可,目录可以是system32或者你的DLL所在目录

纯个人经验之谈,有问题欢迎追问
更多追问追答
追问
试了一下,还是不行,redist里的dll全铐过来了,x86的不行,x64的也不行。
追答
哦,是么,不太清楚你的环境;我这边是可以的,另外我的C#指定的是Win32,并不是混合类型,也不是x64类型
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式