“error MSB3216: 無(wú)法注冊(cè)程序集“***.dll”- 拒絕訪問(wèn)。請(qǐng)確保您正在以管理員身份運(yùn)行應(yīng)用程序。對(duì)注冊(cè)表項(xiàng)“HKEY_CLASSES_ROOT\***”的訪問(wèn)被拒絕?!?/div>9.成功編譯后,生成的dll就會(huì)順利注冊(cè)為COM組件,以圖為證:10.然后請(qǐng)將以下代碼輸入到項(xiàng)目中(鑒于排版視覺(jué)效果,本文代碼采用截圖而非文本。在VS強(qiáng)大的自動(dòng)提示下手工代碼相信會(huì)很容易):11.其中的Guid可以通過(guò)以下方式生成/拷貝:12.再次編譯,并可在“MyInterop\bin\Debug”目錄下發(fā)現(xiàn)多生成一個(gè)“MyInterop.tlb”文件。至此,C#的COM組件創(chuàng)建完畢。C++調(diào)用COM組件:1.創(chuàng)建一個(gè)C++ Win32 控制臺(tái)應(yīng)用程序Call_CSharp_COM2.在Call_CSharp_COM.cpp中輸入以下代碼:3.編譯,運(yùn)行:補(bǔ)充:
- 以上demo并未將.net dll部署到GAC,可以通過(guò)命令“gacutil /i MyInterop.dll”進(jìn)行GAC部署操作。只有經(jīng)過(guò)強(qiáng)名稱(chēng)簽名的.net程序集可以順利部署到GAC,這也是demo中選擇對(duì)程序集簽名的原因。沒(méi)有經(jīng)過(guò)強(qiáng)名稱(chēng)簽名的程序集也可以“私有部署”到exe所在的目錄或符合dll搜索順序的路徑中。
- COM注冊(cè)也可以通過(guò)命令“REGASM MyInterop.dll /tlb:MyInterop.tlb”進(jìn)行,同樣需要管理員身份
- 用C++以COM調(diào)用C#比預(yù)想的簡(jiǎn)單多了
參考:
聯(lián)系客服