2010-09-02 49 views
2

需要在DLL中進行更改。該DLL最初編碼在VB6中(不是由我),並且源代碼丟失。重新創建一個COM DLL,我需要擔心GUID嗎?

這是它的功能非常簡單,所以我重新它從頭開始,但我只能訪問VB快遞2008年

我創造了它首先是作爲一個正常的DLL,然後實現它必須是一個COM DLL 。幸運的是,在http://www.codeproject.com/KB/COM/nettocom.aspx的一篇優秀文章告訴我如何。

但是,我不知道的GUID什麼...

我應該使用相同的GUID作爲原始DLL或沒有?它有什麼區別?


編輯:它是否真的無論因爲它是一個COM DLL?它被一個Active X控件調用&我可以在網頁上看到沒有參考的GUI ...(但我只是一個n00b,所以我知道什麼?;-)

回答

2

如果你想這個庫是直接替換原來的,它是完全二進制兼容的(所有接口都沒有改變) - 那麼是的,你應該爲類ID和接口ID使用相同的GUID。如果您不這樣做,那麼原始庫的用戶將無法使用您的程序而無需重新編譯它們的程序。

請注意,二進制兼容性是重用GUID的必備條件。如果你打破了任何接口 - 改變它的ID和實現它的類的ID並重新編譯客戶端。

+0

+1謝謝。嗯,我應該說...這是一個COM DLL,從Active X控件調用,所以它可能沒有區別。顯然,儘管類名,函數名,參數和返回類型必須相同。 – Mawg 2010-09-02 06:54:36

+0

@mawg:那麼,ActiveX控件會略有不同,但不是如何使用GUID。 – sharptooth 2010-09-02 07:14:19

1

GUID充當您的COM對象和DLL的一種標識符。如果使用相同的GUID,則需要註冊新的DLL,以便更新位置(即,如果不將它完全放在同一個位置並重新創建舊的DLL以前註冊的所有接口)。

的清潔方法是生成一個新的GUID和修改使用新的GUID/DLL而不是調用者。

+0

+1謝謝。嗯,我應該說...這是一個COM DLL,從Active X控件調用,所以它可能沒有區別。顯然,儘管類名,函數名,參數和返回類型必須相同。 – Mawg 2010-09-02 06:55:04

相關問題