proxy、stubのビルドの手順は次の通りになります。
.idlファイルのコンパイル
midlに.idlファイルを与えるとコンパイルできます。
この場合、出力ファイルは次のファイルになります。
ichigocom7の部分は.idlファイルの名前になります。
ichigocom7.h | インターフェースを含むヘッダファイル。CLSIDやIIDの実体は含まないため、これらを使う場合はichigocom7_i.cを含める必要がある。Visual C++の__uuidof()キーワード等を使う場合はichigocom7_i.cを含める必要はない。 |
ichigocom7.tlb | タイプライブラリ。 |
ichigocom7_p.c | proxyとstubのC言語ソースコード。 |
ichigocom7_i.c | CLSIDやIIDの実体を収めたC言語ソースコード。 |
dlldata.c | DLLで1つだけ必要となる関数やデータ。複数のインターフェースをコンパイルした場合はそれらが統合される。 |
proxy/stubのビルド
生成されたichigocom7_p.c、ichigocom7_i.c、dlldata.cをビルドすると、
proxyとstubの両方を含むDLLサーバになります。
この際、dlldata.cにREGISTER_PROXY_DLLをつけてコンパイルすると、
DllRegisterServer()とDllUnregisterServer()もあわせてビルドします。
ビルドのコマンドラインは以下になります。
スペースの都合により複数行で書かれていますが、1行で入力します。
C:\> cl /LD /Feichigocom7_proxy.dll /MT /O2 /DWIN32 /D_WIN32
/DREGISTER_PROXY_DLL ichigocom7_p.c ichigocom7_i.c dlldata.c
kernel32.lib user32.lib advapi32.lib rpcrt4.lib ole32.lib oleaut32.lib
ichigocom7.def
この例ではichigocom7.defを用意して読み込ませています。
.defファイルの中身は次の通りです。
EXPORTS
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
COMサーバのビルド
DLLサーバの場合、COMサーバ本体は次のようにビルドします。
スペースの都合により複数行で書かれていますが、1行で入力します。
.defファイルは同じものでかまいません。
C:\> cl /LD /Feichigocom7.dll /MT /O2 /DWIN32 /D_WIN32
ichigocom7.cpp ichigocom7.def ichigocom7_i.obj
kernel32.lib user32.lib advapi32.lib rpcrt4.lib ole32.lib oleaut32.lib
ビルドされたCOMサーバとproxy/stub DLLをそれぞれregsvr32で登録することで、
COMクライアントから利用できるようになります。
proxyとstubを32bitと64bitの両方で動作させたい場合は、
32bitと64bitのそれぞれでビルドしたうえで、両方をシステムに登録すれば動作します。
COMサーバでDllSurrogateを設定していれば、
32bitで書かれたDLLタイプのCOMサーバを、
proxy/stubを介して64bitから呼び出すこともできるようになります。
目次
COM/ActiveXの解説ページ 目次
仕組み
インターフェースの定義
ビルド