MFCでDLLをつくり、それをC#から呼ぶ(復習)

Form appを作る

  • Visual Studioを開き、New Projectを作る、ダイアログで"Visual C#" -> "Windows Form Applicattion"を選択し、名前は"DLLTestForm"

MFC DLLプロジェクトをソリューションに追加する

  • Solution Explorerで"Solution 'DLLTesForm'"を右クリックし、"Add" -> "New Project"を選択
  • ダイアログで"Visual C++" -> "MFC"を選択し、MFC DLLプロジェクトを追加する、名前は"DLLTestEngine"

DLLにする関数を追加する

  • "DLLTestEngine.cpp"を開き、行末に以下を追加する


int DLL_add(int argument1, int argument2)
{
return argument1 + argument2;
}

DLLの関数export関数を宣言する

  • 上記で追加した関数の上に、以下を追加


extern "C" __declspec(dllexport) int DLL_add(int, int);


以上で呼び出されるDLLの実装は終了、次は呼び出すapp側の実装

FormにUIオブジェクトを配置する

  • "DLLTestForm"のForm1にbuttonとlabelを配置する、名前はそれぞれ"buttonAdd"、"labelResult"

ボタンのイベントハンドラを実装する


private void buttonAdd_Click(object sender, EventArgs e)
{
int argument1 = 1;
int argument2 = 1;
int Return = DLL_add(argument1, argument2);
labelResult.Text = string.Format("{0}", Return);
}

DLLラッパー関数を作成する

  • "Form1.cs"のForm1の宣言直後に、以下を追加


[DllImport("DLLTestEngine.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int DLL_add(int argument1, int argument2);

ビルドする

  • ビルドする、ビルドが終わったら、ビルドされたDLLをC# appのexeのあるフォルダーにコピーする

実行する

  • うまくいけば、Formの表示されているラベルが"label1"から"2"に変わるはずだ。