Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1192 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Plantage d'une dll [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Plantage d'une dll [résolu]

n°815849
fatypunk
Java bien !
Posté le 05-08-2004 à 13:50:07  profilanswer
 

Ce code plante, mais si je rajoute un MessageBox juste après "res = pfn_RegisterServer();", il ne plante pas.
 
Quelqu'un a-til une idée, ce n'est pas très pratique le coup du messagebox...
 

Code :
  1. DllCOM::DllCOM(char * dll)
  2. {
  3.     hDLL = LoadLibrary(dll);
  4.    
  5.     if (hDLL < (HINSTANCE)HINSTANCE_ERROR)
  6.     {
  7.         char * buf;
  8.         sprintf(buf, "%s :\n\n\%s\n\n%s", ERR_LOAD_LIBRARY, dll, ERR_CONTACT);
  9.         MessageBox(NULL, buf, "Datagest DllCOM", MB_ICONSTOP);
  10.     }
  11.     else
  12.     {
  13.         pfn_RegisterServer = (DLL_Function_RegisterServer)GetProcAddress(hDLL, "DllRegisterServer" );
  14.         pfn_UnregisterServer = (DLL_Function_UnregisterServer)GetProcAddress(hDLL, "DllUnregisterServer" );
  15.         pfn_CanUnloadNow = (DLL_Function_CanUnloadNow)GetProcAddress(hDLL, "DllCanUnloadNow" );
  16.         pfn_GetClassObject = (DLL_Function_GetClassObject)GetProcAddress(hDLL, "DllGetClassObject" );
  17.        
  18.         HRESULT res;
  19.         res = pfn_RegisterServer();
  20.        
  21.         if (res != S_OK)
  22.         {
  23.             char * buf;
  24.             sprintf(buf, "%s\n\n%s", ERR_REGISTER, ERR_CONTACT);
  25.             MessageBox(NULL, buf, "Datagest DllCOM", MB_ICONSTOP);
  26.         }
  27.     }
  28. }


Message édité par fatypunk le 05-08-2004 à 16:05:46
mood
Publicité
Posté le 05-08-2004 à 13:50:07  profilanswer
 

n°815860
blackgodde​ss
vive le troll !
Posté le 05-08-2004 à 13:53:48  profilanswer
 

             char * buf;  
              sprintf(buf, "%s :\n\n\%s\n\n%s", ERR_LOAD_LIBRARY, dll, ERR_CONTACT);  
 
                    char * buf;  
                    sprintf(buf, "%s\n\n%s", ERR_REGISTER, ERR_CONTACT);  
 
=> elle sont la tes erreurs ... je suppose que si ca plante apres, c parce que ta mémoire est corrompue ...
c'est une coincidence si une MessageBox empeche le plantage


---------------
-( BlackGoddess )-
n°815865
fatypunk
Java bien !
Posté le 05-08-2004 à 13:56:49  profilanswer
 

BlackGoddess a écrit :

char * buf;  
              sprintf(buf, "%s :\n\n\%s\n\n%s", ERR_LOAD_LIBRARY, dll, ERR_CONTACT);  
 
                    char * buf;  
                    sprintf(buf, "%s\n\n%s", ERR_REGISTER, ERR_CONTACT);  
 
=> elle sont la tes erreurs ... je suppose que si ca plante apres, c parce que ta mémoire est corrompue ...
c'est une coincidence si une MessageBox empeche le plantage


 
Je ne vois pas ce qu'il y a de faux là-dedans... et si je commente ces deux bouts de code, ma dll plante quand même... (ma dll j'entend celle que j'écrit et qui utilise cette classe pas celle que cette classe appelle)


Message édité par fatypunk le 05-08-2004 à 13:59:59
n°815870
blackgodde​ss
vive le troll !
Posté le 05-08-2004 à 13:59:35  profilanswer
 

bin si tu as fait partout pareil, c sur qu'elle plante qd mm ...
tu as déclaré un pointeur, mais il pointe dans le vent.
sprintf attend de ton pointeur qu'il pointe vers une allocation valide.


---------------
-( BlackGoddess )-
n°815877
fatypunk
Java bien !
Posté le 05-08-2004 à 14:04:40  profilanswer
 

BlackGoddess a écrit :

bin si tu as fait partout pareil, c sur qu'elle plante qd mm ...
tu as déclaré un pointeur, mais il pointe dans le vent.
sprintf attend de ton pointeur qu'il pointe vers une allocation valide.


 
non c'est les seules... et c'est juste il me semble. Tout comme tu peux écrire :
 
const char* str="untruc";
 
En plus elle fonctionne si je provoque les erreur en question les MessageBox contiennent le bon message.

n°815889
blackgodde​ss
vive le troll !
Posté le 05-08-2004 à 14:08:21  profilanswer
 

en c++ :
 

Code :
  1. #include <sstream>
  2. std::ostreamstring oss;
  3. oss << ERR_LOAD_LIBRARY << "\n\n" << dll << "\n\n" << ERR_CONTACT;
  4. MessageBox(NULL, oss.str().c_str(), "Datagest DllCOM", MB_ICONSTOP);


 
ou
 

Code :
  1. #include <string>
  2. MessageBox(NULL, oss.str().c_str(), "Datagest DllCOM", MB_ICONSTOP);
  3. std::string buf(ERR_LOAD_LIBRARY);
  4. buf += "\n\n";
  5. buf += dll;
  6. buf += "\n\n";
  7. buf += ERR_CONTACT;
  8. MessageBox(NULL, buf.c_str(), "Datagest DllCOM", MB_ICONSTOP);



---------------
-( BlackGoddess )-
n°815896
blackgodde​ss
vive le troll !
Posté le 05-08-2004 à 14:11:01  profilanswer
 

const char* str="untruc";
=> rien à voir :o
 
Taz va faire une attaque :/
 
sprintf attend un buffer alloué ...
const char* str="untruc"; est une initalisation d'un pointeur vers une chaine 'statique' ...
 
et sprintf c'est du C, ici c'est C++


---------------
-( BlackGoddess )-
n°815901
fatypunk
Java bien !
Posté le 05-08-2004 à 14:13:44  profilanswer
 


 
Excuse-moi je suis fatigué c'était évident en y réfléchissant...
 
Là j'ai mis un "char buf[256];", ca marche aussi mais comme je fait du c++ je devrais utiliser les opérateurs de flux.
 
Merci encore...


Message édité par fatypunk le 05-08-2004 à 14:15:42
n°815906
blackgodde​ss
vive le troll !
Posté le 05-08-2004 à 14:14:34  profilanswer
 

exactement :) (pas spécialement les opérateurs de flux, mais au moins les libs du C++ et pas celles du C)
 
de rien


Message édité par blackgoddess le 05-08-2004 à 14:15:24

---------------
-( BlackGoddess )-
n°815907
fatypunk
Java bien !
Posté le 05-08-2004 à 14:14:40  profilanswer
 

BlackGoddess a écrit :

const char* str="untruc";
=> rien à voir :o
 
Taz va faire une attaque :/
 
sprintf attend un buffer alloué ...
const char* str="untruc"; est une initalisation d'un pointeur vers une chaine 'statique' ...
 
et sprintf c'est du C, ici c'est C++


 
 :jap:  
 
C'est bon je sors...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Plantage d'une dll [résolu]

 

Sujets relatifs
Problème en visual basic - TabOrder --> Résolu[Struts] Question sur struts-config.xml[Résolu]
[batch dos RESOLU] lire nombre dans fichier et l'exploiter pour calcul[Excel][Résolu] pb de variable avec une feuille
Probleme boucle while[Résolu]Concatener un $_POST et une variable [RESOLU]
[PHP] function + global, besoin d'aide... [RESOLU][Résolu] [ASPX] Compilation en ligne de commande et Crystal Reports
Perl :: probleme d'array et de length [resolu][PHP/SQL] - delete [résolu]
Plus de sujets relatifs à : [C++] Plantage d'une dll [résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR