DLL とリソースを使用する MFC アプリケーション "Analyser" があります。
GetCriteriaDlg という dll に含まれるダイアログのインスタンスを取得する関数があります。
私のdllファイル:
extern "C" {__declspec(dllexport) CCriteriaDlg* GetCriteriaDlg(void );}
in the dll cpp file I have
extern "C"
{
__declspec(dllexport) CCriteriaDlg* GetCriteriaDlg(void )
{
return &dlg;
}
}
関数を使用する私のAnalyserDoc.cpp:
extern "C" {__declspec(dllimport) CCriteriaDlg* GetCriteriaDlg(void );}
dll に報告されたクラスもあります
class AFX_EXT_CLASS CCriteriaDlg : public CDialog
そして、それらは、DllImports.hという名前でAnalyserDoc.cppに含まれている、エクスポートされたクラス ヘッダー ファイルの正確な複製です。
AnalyserDoc.cppには、メニュー項目にマップされる関数があります。
Void CAnalyserDoc::OnAnalyseRun()
{
// TODO: Add your command handler code here
CCriteriaDlg *dlg=GetCriteriaDlg();
dlg->DoModal();
}
ここからが奇妙になります。すべてがそのままの場合、プログラムは起動しますが、MFC の通常の SD ウィンドウは表示されず、タスク マネージャーからプロセスを終了する必要があります。
しかし、その内容をコメントアウトするとOnAnalyseRun()
、ウィンドウは正常にロードされます(しかし、明らかに、メソッド呼び出しに対するアクションはありません。物事を交換しようとしました。メソッド呼び出しなしで *dlg のみを宣言すると、ウィンドウは正常にロードされるため、絶対に関係あると思いますGetCriteriaDlg()
。
なぜそれが起こっているのですか?