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

  FORUM HardWare.fr
  Programmation
  C++

  Problème d'objet instancié?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème d'objet instancié?

n°1283023
mrsaucisse​s
Posté le 13-01-2006 à 15:06:01  profilanswer
 

Bonjour,
 
je suis en train de développer un activeX en C++ avec Visual Studio .NET, et j'ai un problème de bug (plantage de IE) quand je lance une méthode de mon activeX à partir du code JavaScript, et cette erreur vient apparemment d'une instanciation dans cette méthode.
 
je m'explique (un peu longuement):
 
la méthode de l'activeX
 

Code :
  1. BSTR CActiveXCtrl::Init(VARIANT_BOOL _a, VARIANT_BOOL _b)
  2. {
  3.    AFX_MANAGE_STATE(AfxGetStaticModuleState());
  4.    //L'instanciation qui pose problème
  5.    int res = funct->Init(true,true);
  6.    strcpy(resultat, funct->GetText(res));
  7.    CString strResult(resultat);
  8.    return strResult.AllocSysString();
  9. }


 
la fonction init:
 

Code :
  1. int Functions::Init(bool _a, bool _b) {
  2.    this->myIPB = *(new IPB(_a, _b));
  3.    return this->myIPB.Init();
  4. }


 
le constructeur de la classe IPB:
 
 

Code :
  1. IPB::IPB(bool _a, bool _b) {
  2.    pObject = NULL;
  3.    this->res = _a;
  4.    this->comp = _b;
  5. }


 
 
Quand je lance la méthode Init(true,true), internet explorer plante et mon debug me dit:
 

Code :
  1. int Functions::Init(bool _a, bool _b) {
  2. >>>erreur ici   this->myIPB = *(new IPB(_a, _b));
  3.    return this->myIPB.Init();
  4. }


 
 
avec:
this 0xcdcdcdcd
|_>myIPB {pObject=??? res=??? comp=???}
|_> pObject CXX0030 expression cannot be evaluated
|_> res CXX0030 expression cannot be evaluated
|_> comp CXX0030 expression cannot be evaluated
 
Si cela peut aider, l'erreur retournée par Internet Explorer est
 

Citation :

Unhandled exception at 0x013d3841 (ActiveX.ocx) in IEXPLORE.EXE: 0xC0000005: Access violation writing location 0xcdcdcdd1.


 
d'autre part, j'ai instancié cette méthode dans le constructeur de mon activeX, et à ce niveau là, ça passe , plus d'erreur!
 
voyez-vous quel est le problème?
 
merci d'avance

mood
Publicité
Posté le 13-01-2006 à 15:06:01  profilanswer
 

n°1283048
Taz
bisounours-codeur
Posté le 13-01-2006 à 15:28:00  profilanswer
 

*(new IPB(_a, _b))
 
euh ... c'est une feature cette fuite de mémoire ?

n°1283052
mrsaucisse​s
Posté le 13-01-2006 à 15:30:50  profilanswer
 

fuite de mémoire? Pourrais-tu m'expliquer quel est le souci avec ce pointeur sur objet?

n°1283066
Taz
bisounours-codeur
Posté le 13-01-2006 à 15:48:27  profilanswer
 

il est tout ton delete ? pour faire un new ?

n°1283104
mrsaucisse​s
Posté le 13-01-2006 à 16:32:51  profilanswer
 

le delete est dans ma classe avec le constructeur

n°1283121
Taz
bisounours-codeur
Posté le 13-01-2006 à 16:48:46  profilanswer
 

montre nous :
- la définition des variables membre
- ton constructeur (enfin lui on l'a)
- ton destructeur
- ton constructeur par recopie
- ton operator=

n°1284490
mrsaucisse​s
Posté le 16-01-2006 à 14:04:09  profilanswer
 

j'ai un peu bidouillé mon code depuis mais ca ne change pas grand chose, voilà à peu près tout le code (dans l'ordre d'appel) que j'ai et qui me pose problème:
 

Code :
  1. // OpenPB de la classe function
  2. int Functions::OpenPB(const char* IP) {
  3. return this->myAgent.OpenPB(IP);
  4. }
  5. // OpenPB de la class agent
  6. int Agent::OpenPB(const char* IP) {
  7. this->myIPB = IPB(IP);
  8. this->myIPB.setResilient(this->resilient);
  9. this->myIPB.setCompact(this->compact);
  10. return this->myIPB.OpenPB();
  11. }
  12. // constructeur de IPB
  13. IPB::IPB(const char* IP) {
  14. this->IPaddress = new char(strlen(IP));
  15. strncpy(this->IPaddress, IP, 10);
  16. }
  17. // L'operator =
  18. IPB& IPB::operator=(const IPB& ipb) {
  19. if(this==&ipb)
  20.  return *this;
  21. this->compact = ipb.compact;  //<------c'est ici que l'appli plante (l'objet this n'existe pas !)
  22. this->alive = ipb.alive;
  23. this->resilient = ipb.resilient;
  24. this->primaryPB = ipb.primaryPB;
  25. this->pObject = ipb.pObject;
  26. if(strlen(ipb.IPaddress)!=0) {
  27.  this->IPaddress = new char(strlen(ipb.IPaddress));
  28.  strncpy(this->IPaddress, ipb.IPaddress, 10);
  29. }
  30. return *this;
  31. }


 
 
il faut savoir que ce code fonctionne bien sur une application win32, mais qu'en passant mes fichiers dans l'activeX, paf ca ne marche plus :/

n°1284509
Taz
bisounours-codeur
Posté le 16-01-2006 à 14:16:57  profilanswer
 

utilise des std::string déjà, on verra ensuite.

n°1284525
mrsaucisse​s
Posté le 16-01-2006 à 14:26:16  profilanswer
 

[EDIT]rien à dire en fait[/EDIT]


Message édité par mrsaucisses le 16-01-2006 à 15:34:34
n°1284528
mrsaucisse​s
Posté le 16-01-2006 à 14:27:55  profilanswer
 

Tu n'aimes pas les char* qui trainent dans mon code? :)


Message édité par mrsaucisses le 16-01-2006 à 15:34:55

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

  Problème d'objet instancié?

 

Sujets relatifs
[vbs] Problème de lecture de paramètresProblème Aff/cacher un div : l'image ok sous FF mais pas sur IE
Probleme avec l'utilisation du port seirie et javax.comm[visual c++ 6] problème de compil' sous XP home
probléme MySql et visual.net 2003Probleme execution script python sitemap google
Java: Probleme de Cast[Sockets]Problème étrange
Création d'objet dynamique[WEBLOGIC] probleme de déploiement d'un ear
Plus de sujets relatifs à : Problème d'objet instancié?


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