2013年7月21日日曜日

CからC#を呼ぶ面倒な方法の1つ

今回は、CからC#で作ったDLLを呼ぶ方法について書きます。タイトルにも書きましたが、かなり面倒なやり方なので、みなさんは頑張って回避してください。

さて、手順は次のようになります。

  1. C#でDLLを作成する
  2. 上で作成したDLLをレジストリへ登録する
  3. Cでプログラムを作成する
C#でDLLを作成する
Cから呼び出されるライブラリをC#で作成します。

DLLをレジストリへ登録する
警告が出ますが気にしない。だってサンプルですもの。

Cでプログラムを作成する
さあ、ここからが本番です。先ほど登録したDLLからクラス名とメソッド名を指定してオブジェクトに働いてもらいましょう。大まかなイメージはJavaやC#のリフレクションに近いです。

  1. 初期化
  2. クラス名からCLSIDを取得
  3. インスタンス作成
  4. IDispatchへキャスト
  5. メソッド名からDISPIDを取得
  6. パラメータの設定
  7. メソッドの呼び出し
  8. 終了処理
ここで注意が必要なのが、パラメータの設定です。適切なVariantTypeと適切なプロパティを選ばなくてはいけないところ、さらに、パラメータの順番が逆転するところに注意してください。

お疲れ様でした。