コンソールアプリケーションからMFCのDLLを呼び出す


■説明
これは、コンソールアプリケーション(MS−DOSのコマンドプロンプト)からダイアログウィンドウを表示するDLLを呼び出すプログラムです。作成の手順とポイントを説明します。(ポイントはこの色の文字です。)
(1) まず、メインとなるコンソールアプリケーションを作成します。(名前は例として"main"とします。)
[新規作成]でプロジェクトの[Win32 Console Application]を選択します。
種類は、[単純アプリケーション]です。すると、指定した名前のCPPファイルができ、空のmain関数ができています

(2) 次に、この状態のままダイアログを表示するDLLを作成します。(名前は例として"sub"とします。)
[新規作成]でプロジェクトの[MFC AppWizard (dll)]を選択します。
また、[現在のワークスペースへ追加]のチェックボックスをクリックします。後の設定はデフォルトのままです。
プロジェクト自体がツリー構造になり、このような親子関係の場合作業がしやすくなります。


(3) ワークスペースのsubのリソースに追加でダイアログを作成します。

(4) このダイアログに対応するクラスを作成します。取りあえず中身は要りません。(名前はCTestにします。)

(5) sub.cppにこのダイアログを作成するグローバル関数を作成します。(名前は"display_dialog()"とします。)
またこの関数を外部から参照できるように定義します。
#include "test.cpp" // ダイアログのファイルです。
extern "C"
{
__declspec(dllexport) void __cdecl display_dialog();
}
void display_dialog()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CTest dlg;
dlg.DoModal();
}
AFX_MANAGE_STATEの行でMFCを使えるようになります。説明はsub.cppの冒頭のコメントに記されています。

(6) subをビルドします

(7) mainをアクティブプロジェクトにします。クラス名を右クリックするとメニューが出ます。

(8) main.cppに以下の青字部分を追加します。
#include "stdafx.h"
extern "C"
{
__declspec(dllimport) void __cdecl display_dialog();
}

int main(int argc, char* argv[])
{
display_dialog();
return 0;
}
(9) mainにDLLのためのライブラリを追加します。
[プロジェクト]の[設定]の[リンク]の[オブジェクト/ライブラリモジュール]に/sub/debug/sub.libを追加します。
([プロジェクト]の[プロジェクトへ追加]の[ファイル]で種類をライブラリファイルにし、sub.libを選択してもOKです。)

(10) mainをビルドします。

(11) DLLを読み込むために[プロジェクト]の[設定]の[デバッガ]の[作業用のディレクトリ]を.\sub\debugにします。

(12) mainを実行してみてください
■ファイルのダウンロード
(MFC6.0 プロジェクトファィル 29KB)