IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

affichage d'un DWORD


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut affichage d'un DWORD
    Bonjour,

    Je suis sur un problème tout bête, mais je n'y arrive pas, donc je vous le soumet en vous remerciant d'avance pour vos réponses :

    Je suis avec Visual Studio, je n'utilise pas le framework .net, et je tente de charger une DLL avec la fonction

    LoadLibrary("laDll.dll");

    mais en testant le handle renvoyé, je me rend compte que mon chargement a échoué, donc, j'appelle la fonction

    GetLastError;

    Là, je reçoit un joli DWORD, mais mon problème, est que j'aimerai bien savoir quel est ce numéro d'erreur !

    J'ai essayé en vain de l'afficher via la fonction MessageBox

    Is everyone can help me ?

  2. #2
    screetch
    Invité(e)
    Par défaut
    voila comment afficher l'erreur avec un beau message (dans ta langue natale)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    char *errorMessage;
    if(::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                        NULL,
                        ::GetLastError(),
                        0,
                        (LPTSTR)&errorMessage,
                        0,
                        NULL))
    {
                (void)MessageBox(0, errorMessage, "Erreur", MB_ICONERROR | MB_OK);
                (void)LocalFree(errorMessage);
    }
    else
    {
                (void)MessageBox(0, "Meme pas reussi a recuperer le message", "Erreur", MB_ICONERROR | MB_OK);
    }

  3. #3
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut Merci beaucoup !!!
    mais j'ai le regret de t'annoncer qu'au premier abord, ta solution a pour seul effet de figer mon application...

    je vais me pencher un peu plus sur ce que tu as marqué, pour comprendre le truc (même si c'est suffisamment limpide au premier abord)

    je précise que je suis dans le code d'une Dll, peut-être est-ce à cause de cela que ça ne marche pas ?

    Merci quand même.

  4. #4
    screetch
    Invité(e)
    Par défaut
    ah tiens bizarre, enfin je reste a l'ecoute si tu arrives a trouver l'erreur!

  5. #5
    Membre averti
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut Alors...
    Après quelques tests, il s'avère que ton code n'était responsable de l'arrêt de fonctionnement de mon application... ça m'aurait étonné aussi vu comment il est simple !

    Je vais donc t'expliquer mon but plus en détails :

    Je doit faire une application en C++ qui se sert d'une DLL en C++ qui se sert d'une DLL en Delphi, en gros c'est ça.

    Le problème est que ma DLL en C++ refuse de charger la DLL en Delphi, alors que l'application en C++, elle veut bien charger la DLL en Delphi.

    Voici des codes de test :

    L'Application en C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <windows.h>
     
    int main() {
    	HMODULE hinstDLL;
    	MessageBox(0,"Chargement de la DLL...","Suivi",0);
    	hinstDLL=LoadLibrary("SimpleDll.dll");
    	FreeLibrary(hinstDLL);
    	hinstDLL=LoadLibrary("simpledllcpp.dll");
    	FreeLibrary(hinstDLL);
     
    	return 0;
    }
    Rien d'extraordinaire...

    La DLL en Delphi : SimpleDll.dll
    Ce n'est pas la vraie, c'est juste pour tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    library Convert;
    uses dialogs;
    Const
    DevEuro=6.55957;
    function ConvertEuro(Montant:double):double; stdcall;
    begin
    Result:=Montant*DevEuro;
    end;
    function ConvertFranc(Montant:double):double; stdcall;
    begin
    Result:=Montant/DevEuro;
    end;
    exports
    ConvertEuro,
    ConvertFranc;
    begin
      ShowMessage('Project1 :: Initialisation');
    {partie initialisation de la dll}
    end.
    La Dll en C++ : simpledllcpp.dll
    Générée par Visual Studio 2005, je n'ai modifié que le DllMain
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    // simpledllcpp.cpp : Defines the entry point for the DLL application.
    //
    #include "stdafx.h"
     
    #ifdef _MANAGED
    #pragma managed(push, off)
    #endif
     
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
    					 )
    {
    	HMODULE hinstDLL;
    	MessageBox(0,(LPCWSTR)"",(LPCWSTR)"",0);
    	hinstDLL=LoadLibrary((LPCWSTR)"SimpleDll.dll");
    	char *errorMessage;
    	if(::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,::GetLastError(),0,(LPTSTR)&errorMessage,0,NULL))
    	{
    		(void)MessageBox(0, (LPCWSTR)errorMessage,(LPCWSTR)"Erreur",MB_ICONERROR | MB_OK);
    		(void)LocalFree(errorMessage);
    	}
    	else
    	{
    		(void)MessageBox(0, (LPCWSTR)"Meme pas reussi a recuperer le message", (LPCWSTR)"Erreur", MB_ICONERROR | MB_OK);
    	}
    	FreeLibrary(hinstDLL);
    	return TRUE;
    }
     
    #ifdef _MANAGED
    #pragma managed(pop)
    #endif

  6. #6
    screetch
    Invité(e)
    Par défaut
    Il se peut que ca plante dans l'initialisation de la Dll delphi (pour une raison quelconque ca plante avec le C++ de la Dll mais pas avec le C++ du programme)

    donc c'est l'appel a LoadLibrary qui lance l'initialisation, et la PAF! pastèque.

    Pour voir ci c'est ca mets des messages au debut et a la fin de l'initialisation et verifie que tu vois les deux messages. Si ca plante entre les deux messages, essaye de rapprocher les messages jusqu'a ce que tu aies encadre l'execution qui plante et tu auras l'identité du bug.

    Exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    library Convert;
     
    uses dialogs;
     
    Const
       DevEuro=6.55957;
     
    function ConvertEuro(Montant:double):double; stdcall;
    begin
       Result:=Montant*DevEuro;
    end;
    function ConvertFranc(Montant:double):double; stdcall;
    begin
       Result:=Montant/DevEuro;
    end;
    exports
       ConvertEuro,
       ConvertFranc;
    begin
       ShowMessage('Project1 :: Initialisation');
       {partie initialisation de la dll}
       ShowMessage('Project1 :: Initialisation OK!!!');
    end.
    et resserre les deux ShowMessage jusqu'a ce que tu encadres la ligne qui plante.

    Si les deux dialogues marchent c'est que le bug n'est pas dans cette initialisation

Discussions similaires

  1. Affichage attribut type DWORD dans IHM
    Par AurelieBP dans le forum C++Builder
    Réponses: 1
    Dernier message: 19/05/2012, 16h36
  2. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  3. Affichage de documents PDF
    Par Dajon dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/10/2002, 11h36
  4. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo