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;
}
{
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;
}
不过,不见得经典,应该说很原始了。
我见过有人将注册的字符串保存在字符串数组中,然后使用它进行注册,这样可扩展性好
当然现在ATL直接用脚本注册,更强!