Acces violation

cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005 - 6 sept. 2005 à 09:45
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 6 sept. 2005 à 12:39
Bonjour,

j'ai crée une DLL sous VC++ à l'aide de la librairie ADO, pour la tester j'ai créé un programme en c++ qui l'utilise, mais en mode debug, j'ai une erreur.
"error=unhandled exception in .exe: OxCOOOOOO5: Acces Violation"
je ne vois pas pourquoi j'ai cette erreur! et surtout à quoi elle correspond!
qd mon programme plante, voilà où le debugger m'emmène:
dans le fichier c:\...\VC98\include\comip.h
et voilà ou il pointe:
// AddRefs only if the interface is not NULL
//
void _AddRef() throw()
{
if (m_pInterface != NULL) {
m_pInterface->AddRef(); // il pointe ici
}

je ne sais pas ce qu'est ce fichier comip.h et surtout d'où vient cette erreur!!!!

j'ai vraiment besoin d'aide car ca fait un moment que je tourne en rond!!!
merci.

11 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
6 sept. 2005 à 09:54
Les messages de violaton d'accès viennent le plus souvent de problème de pointeur qui pointe pas au bon endroit.
Le bout de code que tu nous montres gere une exception apparement du fait de la présence du throw.

Revoie ton code a tou les coups c'est toi qui génére l'exception lors d'un appelle.
Teste ton programme en mode Debug et déroule le pas a pas en vérifiant systématiquement les valeurs de tes pointeurs.

Shell
0
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
6 sept. 2005 à 10:13
désolée mais étant débutante, je ne comprends pas ce qu'est la présence du throw.
et que m'apporte la valeur des pointeurs, comment dois je m'en servir.

merci de votre aide.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 sept. 2005 à 10:15
CoInitialize(NULL);
C'est fait en début de prog ?

ciao...
BruNews, MVP VC++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
6 sept. 2005 à 10:19
Un pointeur représente une adresse mémoire qui contient des données.
Seuleument ce pointeur peut correspondre a une adresse ou il n'y a rien, d'ou le plantage des programmes utilisant des pointeurs mal initialisés.
Le throw est une instruction permettant de gérer les exceptions qui peuvent survenir dans un programme, ce qui évite souvent le plantage du programme en question.

Je n'y connais pas grand chose en ADO mais tu peux toujours m'envoyer ton code en zip a shellkode at hotmail.com
Je regarderai ce que je peux faire.

Shell
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
6 sept. 2005 à 10:22
Merci pour vos explications, je vais essayer d'envoyer le programme

et sinon, non, je n'ai pas fait le CoInitialize(NULL); àquoi sert il?
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
6 sept. 2005 à 10:31
Au tout debut de ton programme dans le Main, écrit tout simplement CoInitialize(NULL).
Ca permet d'initialiser la objets COM.

Essaye de faire ca puis teste.

Shell
0
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
6 sept. 2005 à 10:42
ok, ca à l'air de marcher, je n'ai plus de pb d'access violation.
mais le CoInitialize(NULL), je ne dois pas l'utiliser dans ma DLL?, je l'utilise juste dans le main?

en tout cas, merci de votre aide.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
6 sept. 2005 à 10:55
Pour ne pas dire de bétise je dirai que non. Juste dans le main pour initialiser tes objets COM.
BruNews peux tu confirmer ?

Shell
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 sept. 2005 à 11:17
Il serait cohérent qu'il soit dans la DLL, ça assure sa réusabilité.
Pour autant, si c'est toujours toi qui t'en sers alors no prob si est appelé depuis le prog utilisant la dll du moment que tu assures cet appel, il doit y avoir au moins 1 fois cet appel au niveau du processus.

ciao...
BruNews, MVP VC++
0
cs_mamag Messages postés 48 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 6 octobre 2005
6 sept. 2005 à 11:22
ok, merci beaucoup et bonne journée.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
6 sept. 2005 à 12:39
Ca chie des bulles sur CS ya des bug :-/

Bonne journée à toi aussi.
0
Rejoignez-nous