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?