TL; DR由regsvr32
生成的所有註冊表項必須存在於SxS reg-free-COM清單中,反之亦然?清單中的註冊免費COM需要哪些標籤?
我想要免費註冊COM去第三方組件。
Readingupon的主題,我發現有提到的幾個元素,可以放入清單:
From the docs,我們可以添加以下標籤清單來描述一個COM組件:
assemblyIdentity
- 這真的只是描述了「抽象assembly」據我可以告訴comClass
- 介紹COM類(IID在terface)。它會出現,這總是需要的。typelib
- 什麼時候?comInterfaceExternalProxyStub
- 什麼時候?- - 什麼時候?
From the other docs for HKEY_LOCAL_MACHINE\SOFTWARE\Classes
我們可以看到有幾個類別的COM註冊表項:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CLSID}
我認爲大致相當於comClass
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{IID}
將對應於要麼comInterface[External]ProxyStub
,但我認真地無線索何時使用哪個(或兩者)- 哪個regsitry條目對應於
typelib
清單條目?
使用regsvr42提取東西,我想regfree的dll產生僅包含comClass
條目,沒有類型庫或ProxyStub條目清單。 (並且我交叉檢查了寫入的密鑰,所述的DLL,pdm.dll
,MS的進程調試管理器僅寫入這些密鑰,即在註冊表中沒有明顯的類型庫或代理存根信息。)
如果註冊表只包含與comClass
有關的信息,那麼這是否意味着此信息在SxS清單中是足夠的,或者可能需要清單中的其他信息?
順便說一句,我注意到註冊表中包含VersionIndependentProgId
,並且具有附加在末尾的一個版本號的ProgId
。該清單僅具有ProgId
條目,該文檔狀態:
的ProgID:與 COM組件相關聯版依賴性編程標識符。 ProgID的格式是
<vendor>.<component>.<version>
。
但該文檔還規定
的comClass元素可以有
<progid>...</progid>
元素 孩子,這列出的版本有關的ProgID。
and they say progid屬性應該是版本無關的。
那麼,這裏放什麼?當客戶端沒有請求特定版本時,它甚至是重要的嗎?
PDM不會有類型庫,它沒有IDispatch接口,您必須使用CoCreateInstance()。而且它像一個免費線程進程組件一樣嘎嘎,所以不需要代理/存根。這裏究竟出了什麼問題? –
@Hans,謝謝。沒有任何事情會出現這樣的錯誤,但我不確定是否有任何潛在的缺陷。 (COM總是讓我覺得我失去了一些東西。)如果你能幫助我解開上面的兩個或三個實際有用的問題,我會很感激。否則,我很高興,你似乎認爲一切都是我命令:-) –