0

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()

なぜそれが起こっているのですか?

4

0 に答える 0