proxy/stubの利用 - ビルド

いちごパック > COM/ActiveXの解説 > proxy/stubの利用 - ビルド
proxy、stubのビルドの手順は次の通りになります。

.idlファイルのコンパイル

midlに.idlファイルを与えるとコンパイルできます。
C:\> midl ichigocom7.idl
この場合、出力ファイルは次のファイルになります。 ichigocom7の部分は.idlファイルの名前になります。
ichigocom7.hインターフェースを含むヘッダファイル。CLSIDやIIDの実体は含まないため、これらを使う場合はichigocom7_i.cを含める必要がある。Visual C++の__uuidof()キーワード等を使う場合はichigocom7_i.cを含める必要はない。
ichigocom7.tlbタイプライブラリ。
ichigocom7_p.cproxyとstubのC言語ソースコード。
ichigocom7_i.cCLSIDやIIDの実体を収めたC言語ソースコード。
dlldata.cDLLで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の解説ページ 目次
  • 仕組み
  • インターフェースの定義
  • ビルド