IClassFactory

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