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