Question

Je chargé la forme mais seulement des boutons sans fonctions

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

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

Alors, comment je peux charger une fonction complète de la forme et je n'ai pas le code source DLL

Était-ce utile?

La solution

Ceci est possible que si vous êtes sûr que la mise en œuvre de la classe de dialogue MFC basée et la classe est exportée à partir Tools.dll. Vous pouvez vérifier votre .dll avec Dependency Walker utilitaire.
S'il vous plaît noter le compilateur Mangles nom du constructeur. Voilà ce que je suis arrivé à la déclaration suivante.

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

    }
};

Mangled Nom du constructeur: ?? _ 7TestDialog @@ 6B @

Probablement vous serez en mesure de recréer en-tête de classe de dialogue sur la base des résultats de votre inspection. Vous devez également vous assurer que vous avez la même version de MFC aussi bien pour Tools.dll et votre application.

Autres conseils

Pour afficher la boîte de dialogue de MFC dll, comme scénario - vous avez fonction exportée dans la DLL et de cette fonction que vous appelez DoModel().This TEMPLATE réellement stockées dans le besoin DLL module.You à l'état du module de commutation pour poignée courant used.You être peut faire en utilisant:

AFX_MANAGE_STATE(AfxGetStaticModuleState());

AFX_MODULE_STATE AfxGetStaticModuleState()

-> structure de The AFX_MODULE_STATE contient des données globales pour le module, qui est la partie de l'état du module qui est poussé ou sauté.

IN Code DLL sera comme ceci:

AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDlg objMyDlg;
iRet = objMyDlg.DoModal(); 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top