创作并行程序集的 Dll

创建自己的并行程序集时,请遵循 创建并行程序 集的准则,并根据以下准则创作程序集中使用的任何 dll:

  • 应设计 Dll,以便在同一进程中同时运行多个版本,而不会相互干扰。 例如,许多应用程序托管多个插件,这些插件需要一个组件的不同版本。 开发人员并行程序集需要进行设计和测试,以确保在同一进程中同时运行组件的多个版本。

  • 如果计划在 Windows XP 之前的系统上将组件作为共享组件提供,则需要继续将这些系统上的组件安装为单实例共享组件。 在这种情况下,你需要确保你的组件是向后兼容的。

  • 当在系统上运行多个版本的程序集时,评估对象的使用情况。 确定程序集的不同版本是否需要单独的数据结构,例如内存映射文件、命名管道、已注册 Windows 消息和类、共享内存、信号量、互斥体和硬件驱动程序。 跨程序集版本使用的所有数据结构必须向后兼容。 确定可跨版本使用的数据结构,以及哪些数据结构必须是专用于某个版本的数据结构。 确定共享数据结构是否需要单独的同步对象,如信号灯和 mutex。

  • 某些对象(如窗口类和原子)为每个进程唯一命名。 应使用清单对每个程序集进行版本控制等对象。 对于原子等对象,请使用版本特定的标识符,除非你计划跨版本进行共享。 如果使用版本特定的标识符,请使用由四个部分构成的版本控制编号。

  • 不在任何 DLL 中包含自注册代码。 并行程序集中的 DLL 不能自我注册。

  • 在 DLL 中定义包含 define 语句的所有特定于版本的名称 # 。 这将允许从一个位置更改所有注册表项。 发布程序集的新版本时,只需更改此 # 定义语句。 例如:

    #define MyRegistryKey "MyAssembly1.0.0.0"

  • 在临时目录中存储任何非持久性数据。

  • 不要将用户数据放入全局位置。 使应用程序数据与用户数据保持分离。

  • 将所有共享文件分配为依赖于应用程序名称的文件版本。

  • 分配跨进程使用的所有消息和数据结构,以防止意外的跨进程共享。

  • 您的 DLL 不应依赖于可能不存在的版本间的共享,例如不在程序集的不同版本间共享的共享内存部分。

  • 如果添加了不遵循原始 DLL 的二进制接口兼容性协定的新功能,则必须分配新的 CLSID、ProgId 和文件名。 然后,需要使用此 CLSID、ProgId 和文件名的并行程序集的未来版本。 这可以防止在并行版本上注册不是并行的 DLL 的版本时出现冲突。

  • 如果重复使用同一 CLSID 或 ProgId,请测试,以确保程序集能够向后兼容。

  • 在程序集代码中初始化和设置程序集的默认设置。 不要将默认设置保存在注册表中。

  • 将版本分配给所有数据结构。

  • DLL 应存储并行程序集的状态,如创作状态存储并行程序集中所述。