IClassFactoryは、オブジェクトの作成を可能にするインターフェース。
IClassFactory | Microsoft Docs
IUnknownだけでは、不完全なので、今回はIClassFactoryも含めた形のモノを作成。
まず、Main.cppで、
前回と違うのは、CoGetClassObjectではなく、CoCreateInstanceを使っているところ。本来、こっちが正しい。
で、これを呼び出すと、DllMain.cppで、
g_Unknown.QueryInterfaceではなく、g_ClassFactory.QueryInterfaceを呼び出す。
そうすると、ClassFactory.cppの、
となる。
AddRefが呼ばれて、そのあと、
CreateInstanceも呼ばれる。
CUnknownも生成されて、
ここでIID_IUnknown_の判定がある。
そのあとは、Method呼んだり、AddRefやReleaseとかいろいろだけど・・・。
最終的に実行すると、
CClassFactory::QueryInterface! CClassFactory::AddRef! CClassFactory::CreateInstance CUnknown::QueryInterface! CUnknown::AddRef! CUnknown::Release! CUnknown::AddRef! CUnknown::Release! CClassFactory::Release! CUnknown::QueryInterface! CUnknown::AddRef! CUnknown::Release! CUnknown::Method! CUnknown::Release! 続行するには何かキーを押してください . . .
最初は、CClassFactoryで処理して、そのあとCUnknownの処理があってという感じ。
Sample/com/IClassFactory/IClassFactory/src/IClassFactory at master · bg1bgst333/Sample · GitHub