注册表中HKEY_CLASSES_ROOT分支的大多数子关键字是ProgID。ProgID指的是程序员给某个CLSID指定的一个程序员易记的名称。
ProgID格式约定:<Program>.<Component>.<Version>
COM库提供的两个函数CLSIDFromProgID和ProgIDFromCLSID,可完成CLSID和ProgID之间的转换。
CLSID clsid;
CLSIDFromProgID(L"Helicopter.TailRot",&clsid);
自注册:有了注册表之后,又如何在其中发布关于组件的信息呢?由于DLL知道它所包含的组件,因此DLL可以完成这些组件的注册。但由于DLL本身并不能完成任何事情,因此在DLL中一定要输出如下两个函数:
STDAPI DllRegisterServer();
STDAPI DllUnregisterServer();
ProgID格式约定:<Program>.<Component>.<Version>
COM库提供的两个函数CLSIDFromProgID和ProgIDFromCLSID,可完成CLSID和ProgID之间的转换。
CLSID clsid;
CLSIDFromProgID(L"Helicopter.TailRot",&clsid);
自注册:有了注册表之后,又如何在其中发布关于组件的信息呢?由于DLL知道它所包含的组件,因此DLL可以完成这些组件的注册。但由于DLL本身并不能完成任何事情,因此在DLL中一定要输出如下两个函数:
STDAPI DllRegisterServer();
STDAPI DllUnregisterServer();
STDAPI 在OBJBASE.H中定义展开为 extern "C" HRESULT __stdcall
DllRegisterServer的实现实际上是通过直接调用注册表的函数来完成的。为注册某个组件或取消某个组件的注册,只需用到6个函数: