|
HELP DLL en C++ Récup de chaine en WINDEV |
Iniciado por epaziot, set., 05 2005 1:34 PM - 7 respostas |
| |
| | | |
|
| |
Publicado em setembro, 05 2005 - 1:34 PM |
Bonjour,
Je débute en C et ne suis pas familier des fonctions "transfert" et "recupchaine".
Donc, je test et plante lamentablement sur la valeur récupérée par mon programme.
Lorsque j'appele "read_stdin", j'ai bien 32 en retour. Avec "RetourneString", j'ai dans"Resultat1" une valeur qui semble être l'adresse de la variable chaine. Mais dans "Buf1", j'ai une chaine qui ressemble à rien.
MERCI de votre aide.
// DLL en C++
#define ISTD_API __declspec(dllexport)
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; }
char str[256];
ISTD_API int read_stdin(void) { return 32; }
ISTD_API char * RetourneString( void ) {
strcpy(str, "TEST"); return( (char *) &str ); }
// Programme WINDEV
Resultat1 est entier
Buf1 est une chaîne de 256
Resultat1 = AppelDLL32("ISTD.dll" , "?RetourneString@@YAPADXZ") Buf1 = ChaîneRécupère(&Resultat1,crAdresseASCIIZ)
Info("1" ,Resultat1,Buf1) |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 05 2005 - 2:00 PM |
Salut,
Il me semble qu'il y a une erreur dans ton chaine récupère.
Resultat1 = AppelDLL32("ISTD.dll" , "?RetourneString@@YAPADXZ") Buf1 = ChaîneRécupère(&Resultat1,crAdresseASCIIZ)
Resultat1 est déjà une adresse, il ne faut donc pas utiliser &Resultat1. La bonne syntaxe serait donc :
Buf1 = ChaîneRécupère(Resultat1,crAdresseASCIIZ)
-- Ciao Pat Biker http://wdgotcha.atspace.com |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 05 2005 - 2:36 PM |
Avec ta modif., j'ai une chaine vide en retour ???? |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 05 2005 - 9:29 PM |
En virant le & de la chaine suivante ? remplace return( (char *) &str ); par return( (char *) str ); |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 07 2005 - 4:06 PM |
Je viens de le faire est j'ai juste "<EOT>" |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 07 2005 - 4:35 PM |
Salut
Ton code en C est correcte,
le seul problème est probablement que l'adresse à laquelle la chaine "TEST" est en mémoire est détruite lors de la sortie de la fonction de la dll. Il faut dont décider quand les plages mémoires de ta dll seront détruites.
Resultat1 est entier Buf1 est une chaîne de 256 iInst est un entier = ChargeDLL("ISTD.dll") //Chargement de la dll Resultat1 = AppelDLL32("ISTD.dll" , "?RetourneString@@YAPADXZ") Buf1 = ChaîneRécupère(&Resultat1,crAdresseASCIIZ) DéchargeDLL(iInst) //Déchargement (destruction) de la dll Info("1" ,Resultat1,Buf1)
Voila.
P.S. Peut tu me dire pourquoi le nom de la fonction n'est pas seulement "RetourneString", et comment as-tu fait pour trouver ce nom bizzard
Mathieu
"Eric" <epaziot@domoform.fr> a écrit dans le message de news: 431bfcba$1@news.pcsoft.fr...
Bonjour,
Je débute en C et ne suis pas familier des fonctions "transfert" et "recupchaine".
Donc, je test et plante lamentablement sur la valeur récupérée par mon programme.
Lorsque j'appele "read_stdin", j'ai bien 32 en retour. Avec "RetourneString", j'ai dans"Resultat1" une valeur qui semble être l'adresse de la variable chaine. Mais dans "Buf1", j'ai une chaine qui ressemble à rien.
MERCI de votre aide.
// DLL en C++
#define ISTD_API __declspec(dllexport)
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; }
char str[256];
ISTD_API int read_stdin(void) { return 32; }
ISTD_API char * RetourneString( void ) {
strcpy(str, "TEST");
return( (char *) &str ); }
// Programme WINDEV
Resultat1 est entier
Buf1 est une chaîne de 256
Resultat1 = AppelDLL32("ISTD.dll" , "?RetourneString@@YAPADXZ") Buf1 = ChaîneRécupère(&Resultat1,crAdresseASCIIZ)
Info("1" ,Resultat1,Buf1)
|
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 09 2005 - 12:36 PM |
Salut,
C'est C++ qui me la pondu (merci Bill) et pour connaitre le nom des entrée dans ma DLL, j'ai utilisé "dependency walker" qui est fourni avec visual studio.
Mais, j'ai résolu le Pb en ajoutant un fichier .def
LIBRARY Fonctions DESCRIPTION "Essai de dll" EXPORTS
fn_ret_valeur_chaine _?fn_ret_valeur_chaine@@YAPADXZ fn_ret_valeur_num _?fn_ret_valeur_num@@YAHXZ
Maintenant, je vais tester tes modifs.
MERCI |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 09 2005 - 12:55 PM |
MERCi, ça fonctionne bien.
A trop réflechir sur un pb, on fini par oublier l'essentiel..... |
| |
| |
| | | |
|
| | | | |
| | |
|