2012-03-08 36 views
0

GetClassFile関数を使用してDLL名をパラメータとして渡し、関数がCLSIDを返すことを期待しています。その後、CoCreateInstanceを使用して、DLLが登録されているかどうかを確認することができました。DLLが既に登録されているか確認してください。

登録済みのDLLを渡してもGetClassFile()の有効な返品を受け取ることができません。

HRESULT hr = GetClassFile((LPCOLESTR) "C:\\Program Files\\Common Files\\Microsoft Shared\\DAO\\dao360.dll", &clsid); 
+4

(LPCOLESTR)キャストは、あなたが間違っていると言ってコンパイラを停止させただけで、間違ったことをやめさせることはありませんでした。 GetClassFile(L "etcetera")のように、代わりにLを使用します。 –

答えて

1

GetClassFile()はCOMに関連していません。 documentationを読むと、DLLファイル名を渡しても、CoCreateInstance()に渡すことができるCOM CLSIDは生成されません。 MK_E_INVALIDEXTENSIONエラーが発生すると常に失敗します。

DLLがタイプライブラリを実装し、そのITypeLibインターフェイスを取得するかどうかを確認するには、LoadTypeLib()を呼び出してください。成功した場合は、GetTypeInfoCount(),GetTypeInfoType()、およびGetTypeInfo()メソッドを呼び出して、TKIND_COCLASSオブジェクトごとにITypeInfoインターフェイスを見つけて取得することができます。それぞれITypeInfoについては、GetTypeAttr()メソッドを呼び出してCLSIDを取得することができます。登録が完了したら、CoCreateInstance()IUnknownインターフェイスに登録を確認するか、レジストリのHKEY_CLASSES_ROOT\CLSID\<clsid>キーを手動でチェックするだけで済みます。

+0

"各ITypeInfoについて、GetTypeAttr()メソッドを呼び出してそのCLSIDを取得することができます" ..................しかし、CLSID frm GetTypeAttrの取得方法は見つかりません。私はこのGUIDを行うことができますclassGUID = typeattr-> guid。しかし、そのdoestnはCLSIDを与える。助けてください。 – user1256249

+0

私はそれを得ました。 – user1256249

+0

'ITypeLib :: GetTypeInfoType()'が 'TKIND_COCLASS'を返すとき、対応する' ITypeInfo :: GetTypeAttr() 'は' TYPEATTR :: guid'メンバのCLSIDを返します。 –

関連する問題