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

您好,看了您在网上提的问题“C#无法调用C++编的DLL”,我现在也遇到了类似的情况,VS2010环境下调用c++动态链接库,生成的程序拷到另外没有装VS的电脑运行时提示... 您好,看了您在网上提的问题“C#无法调用C++编的DLL”, 我现在也遇到了类似的情况,VS2010环境下调用c++动态链接库,生成的程序拷到另外没有装VS的电脑运行时提示“无法加载***.dll”,请问您的问题解决了吗?能否告诉我解决办法?谢谢! 展开
 我来答
tea8b1c
2014-08-01 · TA获得超过620个赞
知道答主
回答量:1174
采纳率:0%
帮助的人:234万
展开全部
就跟你说一下吧,你这种是缺少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所在目录

纯个人经验之谈,有问题欢迎追问
追问
无法加载的dll文件已经是复制到目标机器上了。还有什么别的问题呢?
百度网友4c5a5d4
2014-08-04 · TA获得超过223个赞
知道小有建树答主
回答量:147
采纳率:100%
帮助的人:81.5万
展开全部
您好,问题已经解决。
是缺少C++的运行库。
举个例子:x86的dll需要C++运行库的支持
具体位置是(120是vs的版本,vs2013是12.0版)
(Debug)X:\Program Files\Microsoft Visual Studio 12.0\VC\redist\Debug_NonRedist\x86
Microsoft.VC120.DebugCRT
Microsoft.VC120.DebugCXXAMP
Microsoft.VC120.DebugMFC
Microsoft.VC120.DebugOpenMP
(Release)X:\Program Files\Microsoft Visual Studio 12.0\VC\redist\x86
Microsoft.VC120.CRT
Microsoft.VC120.CXXAMP
Microsoft.VC120.MFC
Microsoft.VC120.MFCLOC
Microsoft.VC120.OPENMP

看你DLL里用了哪些函数了。
我用的是简单粗暴的排除法:
即,把这几个文件夹里的所有DLL,以及我还需要的OpenCV的bin文件夹下的所有DLL,全部放到一个文件夹A里,找一个干净的(没装过任何开发环境的)机器,运行一遍,测试一下所有功能,然后在程序打开的情况下,删除文件夹A下的所有文件,删不掉的就是被调用的。
我的程序最后除了自己写的EXE、DLL和数据库,还有几个dll删不掉的,剩下的就是必备的运行库咯。
mfc120chs.dll
mfc120u.dll
msvcp120.dll
msvcr120.dll
opencv_core248.dl
opencv_highgui248.dll
opencv_imgproc248.dll
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式