STDAPI DllRegisterServer(void)  //  //
{
HRESULT  hr = S_OK; TCHAR    szID[GUID_SIZE+1];
TCHAR    szCLSID[GUID_SIZE+32];
TCHAR    szModulePath[MAX_PATH]; WCHAR    wszID[GUID_SIZE+1];    // Obtain the path to this module's executable file for later use.
GetModuleFileName(
ghInst,
szModulePath,
sizeof(szModulePath)/sizeof(TCHAR)); StringFromGUID2(CLSID_CplSvr1, wszID, GUID_SIZE); WideCharToMultiByte(CP_ACP, 
0, 
wszID, 
-1, 
szID, 
GUID_SIZE+1, 
NULL, NULL); lstrcpy(szCLSID, TEXT("CLSID\\"));
lstrcat(szCLSID, szID);    // [HKEY_CLASSES_ROOT\CLSID\{9C93DB27-B576-4389-965F-28E92AF29286}]
SetRegKeyValue(szCLSID, NULL, NULL, NULL ); // [HKEY_CLASSES_ROOT\CLSID\{9C93DB27-B576-4389-965F-28E92AF29286}\InProcHandler32]
// @="gchand.dll"
SetRegKeyValue(szCLSID, "InProcHandler32", NULL, "gchand.dll" ); // [HKEY_CLASSES_ROOT\CLSID\{9C93DB27-B576-4389-965F-28E92AF29286}\InProcServer32]
// @="C:\\WINDOWS\\System\\ffpage.dll"
// "ThreadingModel"="Apartment"
SetRegKeyValue(szCLSID, "InProcServer32", NULL, szModulePath );
SetRegKeyValue(szCLSID, "InProcServer32", "ThreadingModel", "Apartment" );    return hr;
}

解决方案 »

  1.   

    这是一段经典代码,利用写注册表的API进程COM组件注册.
      

  2.   

    学习,我只看懂了一点就是写注册表,com组件还很模糊
      

  3.   

    DLLRegisterServer 是COM组件的注册Entry
    不过,不见得经典,应该说很原始了。
    我见过有人将注册的字符串保存在字符串数组中,然后使用它进行注册,这样可扩展性好
    当然现在ATL直接用脚本注册,更强!
      

  4.   

    COM注册的,但是并不是很经典,很经典的是采用表注册,这样直接修改表即可