C#调C++生成的dll报0x800736B1错误
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
這個(gè)錯(cuò)誤看上去好像是 C++ DLL庫本身的問題,其實(shí)并不盡然。由于使用了混合模式編譯托管 DLL ,所以該 DLL 又會用到非托管的?CRT?( C Run-Time )庫。如果機(jī)器上沒有安裝這些被使用到的運(yùn)行時(shí)組件,就會產(chǎn)生類似 HRESULT: 0x8007 的錯(cuò)誤。?????? 要注意的是,如果你編譯 C++ 托管程序集的時(shí)候使用的是 Debug 配置的話,生成的 DLL 需要調(diào)用的就是 CRT 對應(yīng)的 debug 版本( msvcr80d.dll 及 msvcm80d.dll 等 )而不是(msvcm80.dll及 msvcp80.dll等)。了解生成的 DLL 到底是 Debug 還是 Release 版本最簡單的方法是用文本編輯器打開該 DLL 文件,找到以下類似的內(nèi)容(一般位于文件末尾處):
<assembly?xmlns="urn:schemas-microsoft-com:asm.v1"? ??
?
如果看到?Microsoft.VC80.DebugCRT?,那說明該 dll?Link的目標(biāo)是 CRT的Debug版本,如果是Microsoft.VC80.CRT?則 link 到再分發(fā)版本。當(dāng)我在 VS.net2005 的 IDE 中通過批生成來生成 C# exe 和 C++ dll 的時(shí)候,如果當(dāng)前的活動(dòng)解決方案配置是 Debug 的話,在 C# 項(xiàng)目的Release輸出目錄下拷貝的會是 C++ dll 的 Debug 版本文件而不是 Release 版本!所以在發(fā)布生成之后確認(rèn)對應(yīng)文件的版本還是相當(dāng)有必要的。
下面是兩種模式需要的文件及目錄位置,根據(jù)模式將相應(yīng)的文件拷入安裝目錄即可解決上述問題
狀態(tài)?: Debug Mode
???? \Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86
????????? |
????????? -> \Microsoft.VC80.DebugCRT
?????????????? |
?????????????? -> Microsoft.VC80.DebugCRT.manifest, msvcm80d.dll, msvcp80d.dll, msvcr80d.dll
??狀態(tài) : Relsase Mode
?????
???? \Microsoft Visual Studio 8\VC\redist\x86
?????????
????????? |
????????? -> \Microsoft.VC80.CRT
?????????????? |
?????????????? -> Microsoft.VC80.CRT.manifest, msvcm80.dll, msvcp80.dll, msvcr80.dll
如何生成Release 版本:
???? 將運(yùn)行按鈕右邊的解決方案配置改為Release模式,然后生成即可
轉(zhuǎn)載于:https://my.oschina.net/duluo180/blog/29730
總結(jié)
以上是生活随笔為你收集整理的C#调C++生成的dll报0x800736B1错误的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows7 Search Fede
- 下一篇: c# char unsigned_dll