注册COM接口的实现

我是新来的COM编程。 我有一个COM对象(和相关的IClassFactory)都准备好了,但我不能完全弄清楚如何注册生成的DLL供其他程序使用。 我所需要的GUID数目也不清楚。

我试图注册的COM对象实现了IAudioSessionEvents接口。

我遇到了DllRegisterServer和DllUnregisterServer的function,但是我还没有find任何明确的使用示例。 他们处理什么键,他们是如何被调用的,什么时候什么时候,等等。

谢谢,
– 凯文·蒙特罗斯

Solutions Collecting From Web of "注册COM接口的实现"

我不确定从这个职位是否您正在实施或使用支持IAudioSessionEvents的DLL。 如果您正在使用此DLL,则可以使用注释行实用程序regsvr32注册该组件。 注册使用:

REGSVR32

取消注册:

regsvr32 / u

regsvr32应该在你的路径,所以这个命令将从任何目录工作。

如果您正在实现有问题的DLL,则必须提供DllRegisterserver和DllUnRegisterserver函数的实现。 这些函数必须设置和清理组件的注册表项。 注册表项的目的是提供ProgID,将其映射到CLSID,并为组件支持的接口提供接口ID。 例如,IAudioSessionEvent的接口ID。 如果您正在实现DLL,则必须提供代码才能执行所有这些任务。

注意:这些函数被regsvr32调用以注册组件。

如果实际编写这些代码非常不寻常,那么一般来说,您会希望使用像ATL这样的框架,它为您处理繁忙工作。 如果你真的想从头开始学习COM,至少编写一次代码是一个很好的练习。

您需要为每个暴露给COM的类使用一个GUID,并且需要为您引入的每个新接口使用一个GUID,并希望通过COM使其可用。

当您使用regsvr32实用程序(Windows附带)注册您的COM暴露的类时,将调用DllRegisterserver / DllUnregister服务器。 它为每个暴露给COM的类添加/删除键到HKCR / CLSID分支。 CoCreateInstance()使用这些键来找出要使用给定的GUID创建一个类的实例的DLL。

如果使用ATL或类似的东西通常不需要完全实现DllRegisterserver / DllUnRegisterserver而是使用库提供的实现。

通常实现自注册的最简单方法是使用ATL服务器类,从CCommodulee(或其他类似的类)派生一个全局变量,并在模块中定义一个COM_MAP。 然后,您要求com模块根据您添加到项目中的.rgs文件来处理注册。