日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#调C++生成的dll报0x800736B1错误

發(fā)布時(shí)間:2024/4/11 C# 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#调C++生成的dll报0x800736B1错误 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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"? ??

  • ??????????manifestVersion="1.0">??
  • ??<dependency>??
  • ????<dependentAssembly>??
  • ??????<assemblyIdentity?type="win32"? ??
  • ????????????????????????name="Microsoft.VC80.DebugCRT"? ??
  • ????????????????????????version="8.0.50608.0"? ??
  • ????????????????????????processorArchitecture="x86"? ??
  • ????????????????????????publicKeyToken="1fc8b3b9a1e18e3b">??
  • ??????</assemblyIdentity>??
  • ????</dependentAssembly>??
  • ??</dependency>??
  • </assembly>??
  • <assembly xmlns="urn:schemas-microsoft-com:asm.v1"manifestVersion="1.0"><dependency><dependentAssembly><assemblyIdentity type="win32"name="Microsoft.VC80.DebugCRT"version="8.0.50608.0"processorArchitecture="x86"publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity></dependentAssembly></dependency></assembly>

    ?

    如果看到?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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。