我已經在VB.NET中重新編寫了一個out-proc COM ErrorModule。該模塊由我們的舊COM C++程序使用。 VB.NET對COM類及其接口使用相同的GUI,與舊的C++使用相同的DispId。我試圖使C++模塊透明,所以我們不需要改變它們。它們只是使用舊的ErrorModule.idl生成的舊ErrorModule.h進行編譯,我打算保留它。它的工作原理,但:在VB.NET中重寫的C++ out-proc COM服務器和跨C++ EXE共享
老:
(C++ COM client) MainProgram.exe
(C++ COM server) LogicalModule.exe
(C++ COM server) ErrorModule.exe, implements IError
現在是:
(C++ COM client) MainProgram.exe
(C++ COM server) LogicalModule.exe
(VB.NET COM assembly) ErrorModule.dll, re-implements IError
MainProgram.exe
ErrorModule.dll
LogicalModule.exe
ErrorModule.dll
通常MainProgram(主程序)調用LogicalModule。如果LogicalModule檢測到錯誤,則會創建一個COM類ErrorModule,並將其接口IError返回給MainProgram,最終將調用IError.showErrorDlg()。
這可以在VB.NET中工作嗎? MainProgram可以使用來自LogicalModule的ErrorModule的IError COM接口嗎?我正在測試兩個C++之間IError的編組。它的工作原理,但我有以下問題。每次我在VB.NET中對ErrorModule.dll進行更改時,重新編譯,然後編組停止工作,並且出現錯誤「ESP的值未正確保存......」。
我意識到如果我重建C++模塊,然後它再次工作?我在ErrorModule.dll的註釋中放入一行代碼,重建,然後停止使用ESP錯誤?兩者之間沒有直接聯繫?據我所知,所有重建VB.NET所做的都是更新註冊表。
很含糊。當您添加或刪除方法參數時,您會在C++程序中發生該錯誤。這完全是非法的,你不能改變IError。 –
我不改變IError。一個模塊創建它的一個實例:pitfError。將它作爲一個byref參數返回:**另一個模塊的pitfError。其他模塊嘗試使用它,然後ESP異常。 –