プログラム

C++でDLL作成#3|C#のEXEで使用|初心者向け

初心者向けプログラミング解説になります。

今回は、C++で作成したDLLを、C#のEXEで実行する手順までまとめましたので、ご参考ください。

前回のあらすじ

前回は、C++でDLLを作成したものを、VB.NETのEXEで使ってみたところまで実践しました。

実践

今回は、C++でDLLを作成したものを、C#のEXEで使ってみます。
※DLLは前回のをそのまま使います。

exe(C#)の作成手順

呼び側の作成(Windows フォーム アプリケーション(.NET Framework))になります。

  • 新しいプロジェクトの作成→ 言語の種類「C#」を選択します。
  • Windows フォーム アプリケーション(.NET Framework)を選択。
  • プロジェクト名「csharpapp_cdll」とします。
  • 「構成マネージャー」を選択して「x64」を新規作成します。
    (DLLは「x64」で作成しましたので、EXE側も「x64」で作成します。)
  • 「x64」を選択した状態で
  • 「開始」をクリックします。
  • ビルドが実行され、のっぺらぼうの画面が表示されました。
  • これで準備は整いました。「×」ボタンを押してForm1画面を閉じます。
  • exeファイルと同じ場所(ここではcsharpapp_cdll > bin > x64 > Debug)に、dllファイルを置きます。
  • フォームにボタンとラベルを追加します。
  • ボタンをダブルクリックして以下プログラムを入力します。
  • Form1.csファイル内に以下プログラムを入力します。
  • DLLの関数を利用可能にするための定義
[System.Runtime.InteropServices.DllImport("cdll.dll")]
public static extern int functest();
  • ボタン押下時にDLLの関数を呼びます。
label1.Text = functest().ToString();
  • 「開始」ボタンで実行します。
  • 「Button1」ボタンをクリックすると、ラベルに「10」と表示されます。

その前に、下記エラーが表示されると思いますので、修正してお試しください。

もし、こんなエラーが出たら1

エラー1

指定されたモジュールが見つかりません。 (0x8007007E)

このエラーが出たら、dllファイルがexeと同じ場所に置いていないと表示されます。

上記の手順通り実施していれば、このエラーは出ません。

もし、こんなエラーが出たら2

エラー2

間違ったフォーマットのプログラムを読み込もうとしました。 (0x8007000B)

このエラーが出たら、dllとexeが、両方とも64ビット(x64)になっていないと表示されます。

上記の手順通り実施していれば、このエラーは出ません。

もし、こんなエラーがでたら3

エラー3

DLL ‘cdll.dll’ の ‘functest’ というエントリ ポイントが見つかりません。

dll側のエクスポートがうまくいっていないのが原因になります。

functest()が本当に定義されているか。

前回、C++のexeでお試し済みなら、これは無いですね。


「extern “C”」を使っているか、もしくは、defファイルを作成してビルドしているか。

「extern “C”」のほうが簡単で、今後追加したときの漏れの心配もないので、こちらを採用します。

VB.NETときも解説済みですが念のためご参考ください。

cdll.hを以下のように修正しました。

画像に alt 属性が指定されていません。ファイル名: vbapp_cdll9.png

修正したdllファイルをexeと同じフォルダにコピーして(上書きして)、お試しください。

最後に

  • exeを実行すると、「Button1」ボタンをクリックすると、ラベルに「10」と表示されました。

以上で、C言語DLLを、C#のEXEで使用する方法になります。

構成マネージャーを「Debug」で進めましたが、納品するようなときは、「Release」でビルドしたファイルを渡しましょう。
ファイルサイズも小さくなって、いろいろ最適化されてますので、処理速度も上がります。

次回は、また別の言語に変えて試した解説を行いたいと思います。

最後まで見てくれてありがとう。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA