11
votes

AfxgetinstanceHandle () déclenche une défaillance d'affirmation

J'utilise MFC dans mon programme C ++ (à l'aide de Visual Studio 2008). Je dois appeler AfxgetinstanceHandle () au début de mon programme.

Cette fonction déclenche un point de rupture: xxx

La déclaration d'affirmation échoue. Y a-t-il quelque chose de spécial qui doit être fait pour initialiser le AFXCURrentInstanceHandle Avant d'essayer d'y accéder?

PS: J'utilise MFC dans une DLL partagée.

edit

Mon code est comme celui-là: xxx

Je voudrais utiliser le instance d'instance afin d'initialiser un CCommodule , puis utilisez-le pour manipuler l'objet COM.


0 commentaires

4 Réponses :


5
votes

Ceci peut se produire si vous mélangez des modes de construction Unicode / MBCS ou de débogage / libération pour la DLL / Application.


1 commentaires

Mon projet et toutes ses dépendances sont conformes à l'aide de MFC dans une DLL partagée, avec DLL de débogage multithread et utilisant des caractères multibytes. Cela peut être dû à quelque chose d'autre



2
votes

Si vous utilisez le MFC, vous ne devez pas fournir de principal, WMain, _tmain ou WinMain - MFC fournit son propre point d'entrée. Mettez le code d'initialisation de votre classe dérivée de votre CWinApp. Si vous n'avez pas de classe dérivée CWinApp, vous n'avez pas créé correctement le projet - utilisez les assistants Visual Studio pour créer une application MFC.


3 commentaires

Donc, il n'ya aucun moyen d'accéder à AFXGETInstanceHandle () sans avoir le tout objet CWinApp?


Je pense que je faisais quelque chose de mal, et je n'avais pas vraiment besoin de cela pour utiliser l'objet COM. Merci.


Downvote parce que ce n'est pas vrai. Pour les applications de fenêtre / GUI Votre déclaration est correcte, le projet Wizzard créera une classe dérivée CWinApp. Mais lorsque vous créez une application de console avec le support MFC, le code source avec une fonction principale (_tmain) est créé et AFXWinInit est appelé premier à configurer le MFC.



9
votes

Utilisation:

AfxGetInstanceHandle();


1 commentaires

Cela ne résout pas le problème pour moi. Mais la réponse de User2528794 fonctionne.



17
votes

J'ai fabriqué une application de console avec MFC et j'ai aussi reçu le message. J'ai trouvé la solution, que vous avez besoin d'un "prologue" au début de votre principal (_tmain, etc.).

int main(int args, char* argv[]) //, char *envp[])
{
    // initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))  
    {       
        // TODO: change error code to suit your needs       
        cerr << _T("Fatal Error: MFC initialization failed") << endl;       
        return 1;   
    }   
    AfxGetInstanceHandle();
    // TODO: code your application's behavior here.
    ...


1 commentaires

J'ai le même problème et je me demandais: ne devrait pas appeler à AfxinitextriceModule (...) initialiser le MFC? Je reçois toujours une erreur lorsque vous appelez AFXGETInstanceHandle () . Si j'ajoute ˙AfxwinInit (...) erreur est parti.