PInvoke による .NET からWin32 DLLの呼び出し

ここではPInvokeを使って.NETから Win32 DLLを呼び出せるかやってみましょう。 まず、「新規作成」で 「その他」を選択します。
PInvoke による .NET からWin32 DLLの呼び出し:画像1

まず、呼び出される Win32 DLLから作成します。DLLウィザードを選択します。
PInvoke による .NET からWin32 DLLの呼び出し:画像2

ユニットをひとつ追加します。
PInvoke による .NET からWin32 DLLの呼び出し:画像3

DLLのプロジェクトソースにコードを書きます。書き足すのはexports の部分です。
PInvoke による .NET からWin32 DLLの呼び出し:画像4

次に、追加したUnit側にコードを書きます。足し算をする関数を作ってみました。呼び出し規約をstdcallにするのを忘れずに。
いったん保存するなどして、次に新規プロジェクトをこのプロジェクトグループに追加します。
PInvoke による .NET からWin32 DLLの呼び出し:画像5

Delphi for .NET のVCLフォームアプリケーションを追加します。(WinFormアプリケーションでもかまわないと思います。)
PInvoke による .NET からWin32 DLLの呼び出し:画像6
PInvoke による .NET からWin32 DLLの呼び出し:画像7

フォームにボタンと、Editを配置しました。
PInvoke による .NET からWin32 DLLの呼び出し:画像8

コードを記述します。まずuses に system.Runtime.InteropServices を追加します。次にDLLImport属性をつけて、関数をインポートするコードを書きます。最後に、ボタンのイベントハンドラでインポートした関数をコールする部分を書きます。
PInvoke による .NET からWin32 DLLの呼び出し:画像9
このプロジェクトをDLLを保存したプロジェクトと同じディレクトリ位置に保存します。その後、アプリケーションを実行します。

PInvoke による .NET からWin32 DLLの呼び出し:画像10
ボタンを押します、結果が正しく受け取れていることが確認できました。 とんでもない値が帰ってくる場合や、エラーが出る場合は、同じ位置に両方のプロジェクトが保存されているか、 呼び出し規約が正しいか確認してください。

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