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++Builder Discussion :

Pb DLL exception


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 28
    Par défaut Pb DLL exception
    Bonjour,

    j'ai une classe exception dans une dl:
    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
     
    #ifdef __DLL__
    	#define IMPORT_EXPORT __declspec(dllexport)
    	#else
    	#define IMPORT_EXPORT __declspec(dllimport)
    	#endif
     
    IMPORT_EXPORT class itExcept{
    protected:
    	std::string TypeError;
    public:
    	itExcept(void);
    	itExcept(const char *_detail);
    	itExcept(const std::string & str);
    	itExcept(itExcept &except);
    	std::string detail;
    };
     
    itExcept::itExcept(void){detail="";}
    itExcept::itExcept(const char *_detail) {detail=_detail;}
    itExcept::itExcept(const std::string & _detail) {detail=_detail;}
    itExcept::itExcept(itExcept & ex) {detail=ex.detail;}
    et je teste ce truc dans une appli

    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
     
    try{
    	try{
    		try{
    			throw itExcept("Tes");
    		}
    		catch(itExcept &e)
    		{
    			ShowMessage(e.detail.c_str());
    			e.detail="TEST-----2";
    			throw e;
    		}
    	}catch(itExcept &e)
    	{
    		ShowMessage(e.detail.c_str());
    		e.detail="------------------------";
    		throw e;
    	}
    }catch(itExcept &e)
    {
    	ShowMessage(e.detail.c_str());
    }
    au deuxième throw "acces violation" et
    GETMEM.INC : mov ebx, TSmallBlockPoolHeader[edx].BlockType


    Si je fait exactement la même chose sans utiliser la dll ça marche.

    Si je ne modifie pas le e.detail dans le deuxième ça marche.
    Si je modifie e.detail et que la chaine est plus petite que la précédente ça marche

    j'utilise BDS2006

    Quelq'un une idée?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 28
    Par défaut
    mes avis que c'est à cause du std::string dans la dll. Si j'utilise la RTL dans la compilation de la DLL et du projet plus d'erreurs.
    Si je remplace string par char* plus de pb.

    Mais je ne comprends pas pourquoi je rencontre ce problème maintenant alors que d'autres classes utilisent des vecteurs et des string(en private).

    j'ai essayé de rendre detail privé et de créer une fonction new_detail(const char *) même résultat.

    pas d'autre solution que d'utiliser la RTL? et de distribué les fichiers associés(c'est chiant)?

Discussions similaires

  1. Windows CE 5 : fsdmgr.dll Exception
    Par Felfel dans le forum Windows Mobile
    Réponses: 0
    Dernier message: 16/09/2010, 10h58
  2. Réponses: 10
    Dernier message: 16/10/2007, 09h57
  3. [VC6 et MFC] Exception dans MFC42D.dll
    Par Philippe320 dans le forum MFC
    Réponses: 8
    Dernier message: 09/12/2005, 14h14
  4. gestionnaire d'Exception dans DLL
    Par pirbd dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2005, 18h58
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

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