[VB.NET et dll en C++] La réf d'objet pas définie à une instance d'obj

La réf d'objet pas définie à une instance d'obj [VB.NET et dll en C++] - C++ - Programmation

Marsh Posté le 05-05-2004 à 10:30:13    

(desolé pour le titre, j'ai du abréger)
 
 
bonjour.
 
je dois créer une dll en c++ à utiliser sous VB.NET.
 
disons que j'ai un problème, et que pour le résoudre j'ai effectué quelques tests.
En voici un :
 
dans ma dll je mets :
 
 

Code :
  1. void Test(LPSTR *chaine)
  2. {
  3. strcpy(*chaine,"Hello World !" );
  4. }


 
 
donc ma dll reçoit une chaîne de caractères.
 
dans mon code VB.NET, je mets :
 
 

Code :
  1. Private Declare Ansi Sub Test Lib "MaDll.dll" (ByRef maChaine As String)


 
 
 
puis dans une form je crée le bouton :
 

Code :
  1. Private Sub TestBT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TestBT.Click
  2. Test(abTempData)
  3. End Sub


 
 
 
 
toutes les compilations se déroule bien, et à l'éxecution j'obtiens :
La référence d'objet n'est pas définie à une instance d'un objet
 
Si je "vide" la procedure "Test" de ma dll, ça fonctionne (mais ça fait rien !).
 
 
 
Je pense qu'il s'agit d'une erreur tout bête mais j'avoue être bien coincé dessus.
merci d'avance pour votre aide.
 
DaNeeL


Message édité par daneel17fr le 05-05-2004 à 10:30:44
Reply

Marsh Posté le 05-05-2004 à 10:30:13   

Reply

Marsh Posté le 05-05-2004 à 11:24:54    

allez quoi !

Reply

Marsh Posté le 05-05-2004 à 11:39:49    

strcpy(*chaine,"Hello World !" );
 
cai quoi un LPSTR ? si c'est un char* planqué ...
 
-> strcpy(chaine,"Hello World !" );

Reply

Marsh Posté le 05-05-2004 à 12:00:12    

De mémoire je crois qu'il faut curieusement déclarer ByVal au lieu de ByRef dans : (ByRef maChaine As String)

Reply

Marsh Posté le 05-05-2004 à 12:12:09    

Il me semble que les chaines VB sont unicodes.

Reply

Marsh Posté le 05-05-2004 à 13:04:02    

Taz a écrit :

strcpy(*chaine,"Hello World !" );
 
cai quoi un LPSTR ? si c'est un char* planqué ...
 
-> strcpy(chaine,"Hello World !" );


 
non  
erreur à la comilation
merci pour ton aide :)

Reply

Marsh Posté le 05-05-2004 à 13:04:43    

cricri_ a écrit :

De mémoire je crois qu'il faut curieusement déclarer ByVal au lieu de ByRef dans : (ByRef maChaine As String)


je vais tester ça des que j aurai fini mon sandwich ;)

Reply

Marsh Posté le 05-05-2004 à 13:04:58    

HelloWorld a écrit :

Il me semble que les chaines VB sont unicodes.


 
ça changerait quoi ?

Reply

Marsh Posté le 05-05-2004 à 13:35:16    

cricri_ a écrit :

De mémoire je crois qu'il faut curieusement déclarer ByVal au lieu de ByRef dans : (ByRef maChaine As String)


 
non ça marche pas :'(

Reply

Marsh Posté le 05-05-2004 à 13:38:53    

Mais as-tu bien crée un .def dans ton projet Dll déjà pour redéfinir la fonction exportée et éviter la décoration ?

Reply

Marsh Posté le 05-05-2004 à 13:38:53   

Reply

Marsh Posté le 05-05-2004 à 14:11:59    

Citation :

ça changerait quoi ?


que c'est pas des char * ou un LPSTR mais des wchar_t * ou LPWSTR

Reply

Marsh Posté le 05-05-2004 à 14:14:37    

HelloWorld a écrit :

Il me semble que les chaines VB sont unicodes.


après documentation : exact
j'ai changé l'entête de ma fonction mais rien de changé à part ça

Reply

Marsh Posté le 05-05-2004 à 14:15:15    

cricri_ a écrit :

Mais as-tu bien crée un .def dans ton projet Dll déjà pour redéfinir la fonction exportée et éviter la décoration ?


oui oui

Reply

Marsh Posté le 05-05-2004 à 14:16:17    

HelloWorld a écrit :

Citation :

ça changerait quoi ?


que c'est pas des char * ou un LPSTR mais des wchar_t * ou LPWSTR


non en fait c'est ansi, et j'ai remis ANSI ds mon entête.
mais je pense pas que ce soit l'origine de mon erreur.

Reply

Marsh Posté le 05-05-2004 à 16:48:08    

Remplace par un messagebox + void Test(void) pour savoir si c'est ton code/passage de param qui est fouarreux ou autre chose.

Reply

Sujets relatifs:

Leave a Replay

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