プログラミング

COMオブジェクト作成時に行われること

2006年1月17日

Set T = CreateObject("App.ObjectType")

の際に行われること。

1)レジストリ:HKEY_CLASSES_ROOT\App.ObjectType\CLSIDよりCLSIDを取得
2)レジストリ:HKEY_CLASSES_ROOT\CLSID\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\InprocServer32より、DLLファイル名を取得
3)DLLのロード
4)DllGetClassObjectの呼び出し。CLSIDには上記の物、iidにはIID_IClassFactoryを指定。ppvにIClassFactoryが得られる。
5)IClassFactory::QueryInterfaceの呼び出し。riidにはIID_IClassFactoryを指定。ppvObjectにはIClassFactoryを指定。
6)IClassFactory::Releaseの呼び出し。
7)IClassFactory::CreateInstanceの呼び出し。pUnkOuterにはNULL、riidにはIID_IUnknown 、ppvObjectにIDispatchが得られる。
8)IClassFactory::Releaseの呼び出し。
9)IDispatch::QueryInterfaceの呼び出し。riidにはIID_IDispatchを指定。ppvObjectにはIDispatchを指定。
10)IDispatch::Releaseの呼び出し。

コード例(CLSIDの取得とDLLのロードは省略)
IClassFactory* ppv;
IDispatch* ppvObject;
DllGetClassObject(CLSID_COM,IID_IClassFactory,(LPVOID*)&ppv);
ppv->QueryInterface(IID_IClassFactory, (void**) &ppv);
ppv->Release();
ppv->CreateInstance(NULL,IID_IUnknown,(void**)&ppvObject);
ppv->Release();
ppvObject->QueryInterface(IID_IDispatch,(void**)&ppvObject);
ppvObject->Release();

参考1 参考2 参考3

コメント

コメントはありません

コメント送信