複数スレッドによる同時呼び出し問題の解決を行っています。このとき、COMはproxyとstubを使っています。proxyとstubは、通常のCOMと同じように、DLLサーバとして実装します。通常のCOMでは、coclassごとに持つCLSIDを与えて作成します。IIDからCLSIDを特定したうえで、そのcoclassを作成します。通常のCOMサーバでは、次のレジストリエントリを作成し、ここに必要な情報を登録します。32bitの設定はHKEY_CLASSES_ROOT\ではなくHKEY_CLASSES_ROOT\Wow6432Node\に見えます。通常のCOMサーバに加えて、レジストリに次のエントリを登録します。呼び出し側がSTAとは限りませんので、ThreadingModelはbothにする必要があります。常にDLLサーバとして使われるため、DllSurrogateは使いません。そのコクラスを作成します。コクラスはDLLサーバでなければなりません。IClassFactoryではなくIPSFactoryBufferと呼ばれるインターフェースを実装します。proxy(IRpcProxyBuffer)やstub(IRpcStubBuffer)を作成するためのインターフェースです。stubはCOM提供のバッファに書かれた内容をメソッド呼び出しに変換する機能を実装します。Apartment間の通信はCOMシステムが行います。システムに用意されていれば自分で用意する必要はありません。Apartment間の通信はシステムに実装されたIDispatchが使われます。COMシステムはメソッド呼び出しをApartment間の通信に変換する方法を知りません。この場合、proxyとstubは自分で用意する必要があります。proxyとstubのDLLサーバを自分で実装するのは大変です。ThreadingModelがbothのproxyとstubを自動生成する機能があります。midlの機能でproxyとstubを生成させると良いでしょう。