COMのDllRegisterServerメソッドを実装しようとしています。
だから私はこのチュートリアルを読みました:http:
//www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c5567/Step-by-Step-COM-Tutorial.htm
そして、DllRegisterServerの一部になるまで手順を実行しました。
これは彼らの実装です:
HRESULT __stdcall DllRegisterServer(void)
{
//
//As per COM guidelines, every self installable COM inprocess component
//should export the function DllRegisterServer for printing the
//specified information to the registry
//
//
WCHAR *lpwszClsid;
char szBuff[MAX_PATH]="";
char szClsid[MAX_PATH]="", szInproc[MAX_PATH]="",szProgId[MAX_PATH];
char szDescriptionVal[256]="";
StringFromCLSID(
CLSID_AddObject,
&lpwszClsid);
wsprintf(szClsid,"%S",lpwszClsid);
wsprintf(szInproc,"%s\\%s\\%s","clsid",szClsid,"InprocServer32");
wsprintf(szProgId,"%s\\%s\\%s","clsid",szClsid,"ProgId");
//
//write the default value
//
wsprintf(szBuff,"%s","Fast Addition Algorithm");
wsprintf(szDescriptionVal,"%s\\%s","clsid",szClsid);
HelperWriteKey (
HKEY_CLASSES_ROOT,
szDescriptionVal,
NULL,//write to the "default" value
REG_SZ,
(void*)szBuff,
lstrlen(szBuff)
);
//
//write the "InprocServer32" key data
//
GetModuleFileName(
g_hModule,
szBuff,
sizeof(szBuff));
HelperWriteKey (
HKEY_CLASSES_ROOT,
szInproc,
NULL,//write to the "default" value
REG_SZ,
(void*)szBuff,
lstrlen(szBuff)
);
//
//write the "ProgId" key data under HKCR\clsid\{---}\ProgId
//
lstrcpy(szBuff,AddObjProgId);
HelperWriteKey (
HKEY_CLASSES_ROOT,
szProgId,
NULL,
REG_SZ,
(void*)szBuff,
lstrlen(szBuff)
);
//
//write the "ProgId" data under HKCR\CodeGuru.FastAddition
//
wsprintf(szBuff,"%s","Fast Addition Algorithm");
HelperWriteKey (
HKEY_CLASSES_ROOT,
AddObjProgId,
NULL,
REG_SZ,
(void*)szBuff,
lstrlen(szBuff)
);
wsprintf(szProgId,"%s\\%s",AddObjProgId,"CLSID");
HelperWriteKey (
HKEY_CLASSES_ROOT,
szProgId,
NULL,
REG_SZ,
(void*)szClsid,
lstrlen(szClsid)
);
return 1;
}
ここで、CLSID_AddObjectは次のように定義されます。
// {92E7A9C2-F4CB-11d4-825D-00104B3646C0}
static const GUID CLSID_AddObject =
{ 0x92e7a9c2, 0xf4cb, 0x11d4, { 0x82, 0x5d, 0x0, 0x10, 0x4b, 0x36, 0x46, 0xc0 } };
StringFromCLSID
私が理解していないのは次のとおりです。1。GUIDを文字列として取得するために使用するのはなぜですか。彼らはすでにそれを持っていて、何らかの理由でそれをIIDに変換しますか?IDLファイルで提供するGUIDは十分ではありませんか?
2.どのGUIDを登録する必要がありますか?ライブラリのGUID?インターフェイスのGUID?クラスGUID?またはそれらのすべて?