.NET Framework 非マネージライブラリとの連携

Last-modified: 2007-05-10 (木) 17:34:51

Windows環境でしか試していません!

三層構造

アプリケーション層は、C#で!

ユーザーに見える表面的な部分は、すべてC#で書きます。
C++/CLIで書いてもいいですが、C#の方がユーザインタフェース周りは優れています(私的感想)。

ライブラリ層は、C++のスタティックライブラリで!

以下のことに気をつけて、後は普通にライブラリを作成します。

  • 文字列はwchar_t型を使用し、文字セットは「Unicode文字セット」に設定します。→ メモリ使用量が気になるのであれば、wchar_tとcharを切り替えられるようにしておきます。アプリケーション層側の都合に合わせて簡単に文字セットを切り替えられるようにしておきましょう。
  • C++言語以外の部分は、ヘッダで使わない。→環境依存になるようなライブラリやヘッダは、絶対にライブラリ層の公開ヘッダで使用すべきではありません。

そしてC++/CLIで中間層を!

基本的には、ライブラリ層とアプリケーション層の橋渡しを行います。
方針は何通りかありますが、以下のモジュール(DLL)を複数提供するのが良いかと思います。

  • (1) マネージと非マネージの橋渡しユーティリティモジュール(型変換など)。
  • (2) ライブラリ層に対する操作を簡便にするためのモジュール(UIに依存せず共通)。
  • (3) UIのデータを上記のモジュール(2)へ渡す変換処理モジュール(モジュール(2)を上手く作れば不要)。

デバッグ方法

何もしなくても、アプリケーション層(C#)と中間層(C++/CLI)はデバッグ可能。
↑「デバッグ可能」は、ステップ実行ができることを指しています。

ライブラリ層(C++)までデバッグしたい場合は、アプリケーション層(C#)のプロジェクトプロパティで、デバッグ項目の「アンマネージコードデバッグを有効にする(U) 」にチェックを入れる。
→若干、ステップ実行が遅くなるものの、ManagedC++時代のようにステップ実行で30秒!なんてことは起こりません・・・たぶん!