質問

フォームをロードしましたが、機能のないボタンのみをロードしました

HMODULE hModule = LoadLibrary(L"Tools.dll");

if (hModule != NULL)
{
    AfxSetResourceHandle(hModule);
    CDialog dgl(MAKEINTRESOURCE(199), NULL);
    dgl.DoModal(); 
}

したがって、フォームの完全な関数をロードする方法とDLLソースコードがない方法

役に立ちましたか?

解決

これは、ダイアログクラスの実装がMFCベースであり、クラスがtools.dllからエクスポートされることを確信している場合にのみ可能です。 .dllで検査してみてください 依存関係ウォーカー 効用。
コンパイラマングルコンストラクター名に注意してください。これは私が次の宣言のために得たものです。

class __declspec(dllexport) TestDialog : public CDialog
{
public:
    TestDialog()
        :CDialog(10)
    {

    }
};

マングルコンストラクター名:?? _ 7testdialog @@ 6b@

おそらく、検査の結果に基づいてダイアログクラスヘッダーを再作成できるでしょう。また、Tools.dllとアプリケーションの両方で同じバージョンのMFCを持っていることを確認する必要があります。

他のヒント

からダイアログボックスを表示します MFC dll 、シナリオのように - あなたはdllでエクスポートされた関数を持っています、そしてあなたが呼び出す関数から DoModel()このテンプレートは実際にDLLモジュールに保存されています。現在のハンドルを使用するためにモジュール状態を切り替える必要があります。

AFX_MANAGE_STATE(AfxGetStaticModuleState());

AFX_MODULE_STATE AfxGetStaticModuleState()

->The AFX_MODULE_STATE 構造には、モジュールのグローバルデータが含まれています。つまり、プッシュまたはポップされたモジュール状態の部分です。

DLLコードは次のようになります:

AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDlg objMyDlg;
iRet = objMyDlg.DoModal(); 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top