撰寫適用于並存元件的 Dll

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

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

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

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

  • 某些物件(例如視窗類別和原子)是每個進程的唯一名稱。 應該使用資訊清單為每個元件建立物件(例如視窗類別)的版本。 對於原子之類的物件,除非您打算在不同版本之間共用,否則請使用版本特定識別碼。 如果您使用特定版本的識別碼,請使用四部分版本控制編號。

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

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

    #define MyRegistryKey "MyAssembly1.0.0.0"

  • 將任何非持續性資料儲存在 Temp 目錄中。

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

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

  • 指派跨進程使用的所有訊息和資料結構,以防止意外的跨進程共用。

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

  • 如果您加入的新功能不符合原始 DLL 的二進位介面相容性合約,就必須指派新的 CLSID、ProgId 和檔案名。 然後需要並存元件的未來版本,才能使用此 CLSID、ProgId 和檔案名。 這可避免在並存版本上登錄不是並存的 DLL 版本時,發生衝突。

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

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

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

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