簡體   English   中英

進程外COM對象動態版本控制

[英]Out of process COM object dynamic versioning

我正在使用由myexe.exe托管的進程外COM對象。 這些exes有多個版本來托管COM對象。 每個版本都可以略微更改接口和方法。 每個myexe.exe文件都位於版本化文件夾中(例如C:\\ v2 \\ myexe.exe,c:\\ v3 \\ myexe.exe)

沒有辦法提前知道哪個版本將運行。 我的客戶端應用程序使用ROT附加到正在運行的exes。 我需要能夠動態使用該COM對象版本,通過IUnknown.QueryInterface發現接口。

不幸的是,如果在Windows注冊表中注冊了舊版本的COM,則在使用較新的方法時會出現崩潰。 一旦我使用“myexe.exe -regserver”在Windows注冊表中注冊了更新版本的進程外COM,崩潰就會消失。 所以我不能在運行時動態使用較舊或較新版本的meexe.exe,因為每次我需要重新注冊我的com版本。

關於我為什么會遇到崩潰或如何解決問題的任何想法?

COM接口永遠不會版本化。 每個COM接口都與其他接口不同。 您使用IID來區分並使用QueryInterface()從一個到另一個。

請參閱QueryInterface指南和指南

COM接口是不可變的。 一旦定義了界面並開始在應用程序中使用它,就不能再進行更改了。 其IID和VTABLE被鎖定。如果您需要對現有方法進行更改或添加新方法,您必須為此創建一個帶有新IID的新接口(新接口可以從之前的接口派生,但這是不要求)。 然后,服務器必須實現新接口,客戶端可以在需要時使用QueryInterface()服務器獲取新接口。 沒有解決這個問題,它是COM的基本規則,以便在創建新服務器版本時不破壞現有客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM