最初的問題是我嘗試使用調試符號重建C++項目並將其複製到測試機器上,該項目的輸出是外部COM服務器(。 exe文件)。當使用託管擴展構建C++項目時,VC++編譯器/鏈接器會做什麼
當調用COM接口函數時,有一個RPC調用失敗: COMException(0x800706BE):遠程過程調用失敗。
根據COM HRESULT設計,如果FACILITY代碼是7,實際上是WIN32錯誤,並且win32錯誤代碼是0x6BE,這是上面提到的「遠程過程調用失敗」。
我所做的只是替換COM服務器.exe文件,原始文件運行良好。
當我簽入項目時,我發現它是一個帶有託管擴展的C++項目。 當我用反射器檢查DLL時,它顯示有2個額外的.NET程序集引用。
然後我檢查了項目設置,沒有發現任何關於額外的2裝配參考。 我打開了包含編譯器選項和鏈接器的詳細庫,並嘗試分析程序集是否通過.h文件間接引用。
我收集了所有的.h文件,並用'#using''#import'和程序集文件自己grep所有文件。
在.h文件中有一個'#using',但與引用程序集不相關。
關於鏈接的.lib庫文件,只有一個.lib文件是另一個託管擴展啓用的C++項目的副產品,其他所有其他文件都是由純粹的傳統C++項目生成的。對於啓用託管擴展的C++項目,我檢查了輸出DLL程序集,它沒有引用2程序集。
我甚至嘗試通過sysinternal的filemon和procmon捕獲附加程序集文件的訪問,但重建過程不能訪問這些文件。
我很困惑VC++/CLI項目的編譯和鏈接過程模型,其中附加程序集引用滑入最終程序集?
在此先感謝您的幫助。