Problème d'objet instancié?

Problème d'objet instancié? - C++ - Programmation

Marsh Posté le 13-01-2006 à 15:06:01    

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

Reply

Marsh Posté le 13-01-2006 à 15:06:01   

Reply

Marsh Posté le 13-01-2006 à 15:28:00    

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

Reply

Marsh Posté le 13-01-2006 à 15:30:50    

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

Reply

Marsh Posté le 13-01-2006 à 15:48:27    

il est tout ton delete ? pour faire un new ?

Reply

Marsh Posté le 13-01-2006 à 16:32:51    

le delete est dans ma classe avec le constructeur

Reply

Marsh Posté le 13-01-2006 à 16:48:46    

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

Reply

Marsh Posté le 16-01-2006 à 14:04:09    

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 :/

Reply

Marsh Posté le 16-01-2006 à 14:16:57    

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

Reply

Marsh Posté le 16-01-2006 à 14:26:16    

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


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

Marsh Posté le 16-01-2006 à 14:27:55    

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


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed