DllRegisterServer的使用

Cub*_*i73 2 com dllregistration

DllRegisterServer当 Windows 或 OLE 希望我在HKEY_CLASSES_ROOT\CLSID. 但我不明白为什么必须实现这个函数,因为当 Windows/OLE 可以调用我的 DLL 时,我的类已经注册了它们的 CLSID 和正确 DLL 的路径。有人可以告诉我,我误会了什么吗?

Han*_*ant 6

你混淆了先有鸡还是先有蛋。为了让 COM 帮助客户端应用程序创建对象和编组调用,它需要知道 COM 服务器所在的位置。客户端应用程序仅使用一个数字(GUID)来告诉 COM 它需要什么对象。从 GUID 到可执行文件中的代码的映射要求 COM 首先知道该文件所在的位置。并且,如有必要,如何将接口上的调用从一间公寓编组到另一间公寓。

它正在注册向 COM 提供该知识的服务器。它在注册表中写入注册表项,COM 使用该注册表项来查找文件。与 CLSID 项一样,其 InProcServer32 子项提供文件的路径。等等。或者如果客户端应用程序选择使用免注册 COM,则嵌入在客户端应用程序中的清单。

使用 SysInternals 的进程监视器观察这一点可以提供很多见解。您将看到 DllRegisterServer() 的作用以及客户端应用程序如何使用这些密钥。

  • @Cubinator73 `DllRegsiterServer` 由 `regsvr32.exe` 调用,也可以直接或间接地由任意数量的流行安装程序调用。这是 DLL 在安装时注册自身的正常方式,您应该遵循该约定。 (2认同)