2008-11-13 48 views
3

我知道,當您在COM接口中添加/更改/刪除方法時,應該更改接口/ coclass GUID,但是類型庫又如何。什麼時候應該更改類型庫的GUID?如果類型庫中的GUID發生更改,是否更改它?或者,只有當類型庫中沒有自己的GUID的內容發生更改時,才需要對其進行更改。何時更改類型庫上的GUID

回答

3

基本原理是COM接口和類型庫應該是不可變的(也就是說,它們不應該改變)。如果您在COM界面中更改了一個項目,那麼新版本需要成爲與以前版本完全分離的實體。唯一的方法是更改​​庫中每個接口的GUID和類型庫自身的GUID。這也是一個好主意(爲了您自己的理智)更改類型庫的名稱。

理想情況下,你不應該改變一個COM接口。相反,創建一個新的派生COM接口併發布到一個新的類型庫中。

+0

不是全部故事! **您可以添加新的接口和類型**而不更新任何現有的GUID,包括類型庫GUID。你可以**添加新的接口到現有的類**。這意味着您可以在不破壞現有編譯代碼的情況下添加新功能。請參閱http://msdn.microsoft.com/en-us/library/7ydsx43e.aspx。所以,類型庫*可以改變! – Olly 2012-10-12 18:26:41

0

我有類似的問題。

我有一個原來的控制與CLSID_A後來上實現接口IID_A在某些1.0類型庫GUID_A

,我決定到一個新的接口添加到原來的控制。然後它將實現IID_A和IID_B接口。我想我應該保持相同的CLSID,但不知道如何處理typelib本身。我主要是做VC++編程的東西,其中涉及QueryInterface,並且不關心版本控制和typelib。你想創建一個具有特定CLSID的對象,你只需要詢問CoCreated實例...然後查詢接口以獲得對新接口的潛在支持...

現在,當我進入像LabVIEW這樣的更加美好的環境或設計時像Microsoft .NET這樣的嵌入式開發環境,似乎打破了MFC的東西。

你在回答中提到要更改所有的GUID。是否將基於可用功能的應用程序調整爲一個完整範例,新的應用程序仍然可以使用它的基本功能與控制的舊版本?也許我沒有注意到後面的一段話:沒有必要讓一個應用程序適應舊的控制版本運行,它只需要一個特定的控制版本。這也是M $出現在ASSEMBLY中的原因。