C#无法调用C++编的DLL
您好,看了您在网上提的问题“C#无法调用C++编的DLL”,我现在也遇到了类似的情况,VS2010环境下调用c++动态链接库,生成的程序拷到另外没有装VS的电脑运行时提示...
您好,看了您在网上提的问题“C#无法调用C++编的DLL”, 我现在也遇到了类似的情况,VS2010环境下调用c++动态链接库,生成的程序拷到另外没有装VS的电脑运行时提示“无法加载***.dll”,请问您的问题解决了吗?能否告诉我解决办法?谢谢!
展开
2个回答
展开全部
就跟你说一下吧,你这种是缺少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所在目录
纯个人经验之谈,有问题欢迎追问
那怎么解决这个问题,很简单,从你的开发机器上(就是编译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文件已经是复制到目标机器上了。还有什么别的问题呢?
展开全部
您好,问题已经解决。
是缺少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
是缺少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
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询