COMを使った .NETアセンブリコール - Delphi 2005

ここでは.NETのクラスライブラリをWin32アプリケーションから呼び出してみます。呼び出し方法は一般に紹介されている、「COMを使った相互運用」で呼び出します。
注意
今回著者が行った方法が最適な方法ではない可能性があります。回りくどい手順を踏んでいるかもしれないということを、あらかじめ認識しておいてください。
前章で作った、ライブラリを修正していきます。まず、パッケージのソースの一番下の部分にある、ComVisibleをTrueにします。正しくはクラスごとに指定するようですが、今回は簡単のため、ここでTrueにしておきます。


次にユニット部分を修正します。まず、Usesにsystem.Runtime.InteropServices などのアセンブリを追加します。次にクラスの定義部分に、インターフェイスを明示的に定義させるClassInterface 属性をつけておきます。TypeはAutoDualにしておきます。(明示的にインターフェイスを作成するようになっていないと、COMから呼び出すことができないようです。)


パッケージをコンパイルします。出来上がったDLLをインストール位置へコピーします。今回 「C:\Program Files\Common Files\iPentec」をインストール位置としました。さらに、このディレクトリにはあらかじめパスを通しておきます。(DLLを参照できるようにするため)
コピーできましたら、念のためGACにも登録しておきます。次にタイプライブラリを抜き出してみます。タイプライブラリは TlbExp.exe で抽出することができます。TlbExp [アセンブリ名] /out:[保存先名] で抜き出せます。


タイプライブラリが出来上がりますので、Delphi 2005などで開いて、正しくタイプライブラリができているか確認してください。


次に、レジストリにCOMを登録します。登録は RegAsm.exe コマンドで登録します。 RegAsm [アセンブリ名] でレジストリに登録できます。


次に、Delphi 2005 のIDEに戻り、「コンポーネント」メニューの「コンポーネントのインポート」を選びます。ダイアログが表示されますので。「.NETアセンブリの取り込み」を選びます。


GACにアセンブリが入っていれば一覧に表示されますので、インポートするアセンブリを選択します。


ユニットディレクトリなどを指定します。


ユニットを作成します。


完了ボタンを押すとユニットがユニットディレクトリ内に作成されます。次に、呼び出し側アプリケーションを作成します。Win32アプリケーションを作成し、ボタンとEditを配置します。


コンポーネントの取り込みウィザードで作られた、ユニットをUsesに追加します。ここではiPentec_Standard_test_Package1_TLB がそれにあたります。ボタンのOnClickにはComを作成しCOMのメソッドを呼ぶコードを書きます。COMのため、作成のためのインターフェイスが、CoTCalcOpになっています。


アプリケーションをコンパイルし実行します。ボタンを押すと、結果が正しく戻ってきていることが確認できます。COM経由で。.NETアセンブリを呼び出せました。


実際に試してみればわかるかと思いますが、かなり、インストールと配置が大変です。.NETアセンブリの登録や、レジストリの追加など、結構な手間がかかります。「これでアプリケーションを配ったら『インストールできません』と問い合わせだらけになりそう…」と思ってしまった方もいるかもしれません。次のセクションでは、もっと簡単にDelphiらしい呼び出し方で、簡単に.NETアセンブリを呼び出してみましょう。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2005-01-01
iPentec all rights reserverd.