撰寫並存元件的 DLL

建立您自己的並存元件時,請遵循建立並存 元件 指導方針,並根據下列指導方針撰寫元件中使用的任何 DLL:

  • 您應該設計 DLL,讓多個版本可以同時執行,並在相同的進程中執行,而不會互相干擾。 例如,許多應用程式裝載多個外掛程式,每個外掛程式都需要不同版本的元件。 並存元件的開發人員必須設計和測試,以確保在相同進程中同時執行時,多個版本的元件正常運作。

  • 如果您打算在早于 Windows XP 的系統上提供元件做為共用元件,您必須繼續將這些系統上的元件安裝為單一實例共用元件。 在此情況下,您必須確保您的元件回溯相容。

  • 在系統上執行多個版本的元件時,評估物件的使用方式。 判斷元件的不同版本是否需要個別的資料結構,例如記憶體對應檔案、具名管道、已註冊的Windows訊息和類別、共用記憶體、旗號、Mutex 和硬體驅動程式。 跨元件版本使用的任何資料結構都必須與回溯相容。 決定哪些資料結構可以跨版本使用,哪些資料結構必須是版本的私人資料結構。 判斷共用資料結構是否需要個別的同步處理物件,例如號志和 Mutex。

  • 某些物件,例如視窗類別和 Atom,會針對每個進程唯一命名。 使用資訊清單的每個元件都應該針對每個元件建立版本設定視窗類別之類的物件。 對於 Atom 之類的物件,除非您打算跨版本共用,否則請使用版本特定的識別碼。 如果您使用版本特定的識別碼,請使用四部分版本控制編號。

  • 在任何 DLL 中不包含任何自我登錄程式碼。 並存元件中的 DLL 無法自我註冊。

  • 使用 #define 語句定義 DLL 中的所有版本特定名稱。 這可讓所有登錄機碼從一個位置變更。 當您發行新版本的元件時,只需要變更此#define語句。 例如:

    #define MyRegistryKey "MyAssembly1.0.0.0"

  • Microsoft Store Temp 目錄中的任何非持續性資料。

  • 請勿將使用者資料放入全域位置。 將應用程式資料與使用者資料分開。

  • 將相依于應用程式名稱的檔案版本指派給所有共用檔案。

  • 指派跨進程版本使用的所有訊息和資料結構,以防止非預期的跨進程共用。

  • 您的 DLL 不應該相依于可能不存在的版本共用,例如未跨不同元件版本共用的共用記憶體區段。

  • 如果您新增的功能未遵循原始 DLL 的二進位介面相容性合約,則必須指派新的 CLSID、ProgId 和檔案名。 接著,需要未來的並存元件版本,才能使用此 CLSID、ProgId 和檔案名。 當未並存的 DLL 版本在並存版本上註冊時,這可防止發生衝突。

  • 如果您重複使用相同的 CLSID 或 ProgId,請測試以確保元件回溯相容。

  • 初始化並設定元件程式碼中元件的預設設定。 請勿在登錄中儲存預設值設定。

  • 將版本指派給所有資料結構。

  • 您的 DLL 應該儲存並存元件的狀態,如撰寫狀態儲存體並存元件中所述。