|
Problème avec l'utilisation des API ou APPELDLL32 |
Started by ali.mahmoudi, May, 20 2005 7:51 PM - 5 replies |
| |
| | | |
|
| |
Posted on May, 20 2005 - 7:51 PM |
Bonjour;
Voci le programme source en C de la dll
#include <stdio.h> #include <yaz/zoom.h>
int main(int argc, char **argv) { ZOOM_connection z = ZOOM_connection_new ("z3950.loc.gov:7090/Voyager", 0); ZOOM_resultset r; const char *rec;
ZOOM_connection_option_set(z, "preferredRecordSyntax", "USMARC"); r = ZOOM_connection_search_pqf(z, "@attr 1=7 0253333490"); rec = ZOOM_record_get (ZOOM_resultset_record (r, 0), "render", 0); if (rec) printf ("%s\n", rec); return 0; }
//fin du programme en C
Voici le programme en windev :
Zoom_connection,nIdConnexion,Zoom_resultset,Zoom_record_taille,hInst sont des entiers Zoom_record est une chaine
hInst =ChargeDLL("yaz.dll") // //Connexion Zoom_connection=AppelDLL32("yaz.dll","_ZOOM_connection_new@8","z3950.loc.gov:7090/Voyager",0) // //options of surch AppelDLL32("yaz.dll","_ZOOM_connection_option_set@12",Zoom_connection, "preferredRecordSyntax",="USMARC") // //Surch // Zoom_resultset=AppelDLL32("yaz.dll","_ZOOM_connection_search_pqf@8",Zoom_connection, "@attr 1=7 0253333490") // //Reccord
Zoom_record_taille=AppelDLL32("yaz.dll","_ZOOM_resultset_record@8",Zoom_resultset,0) Zoom_record=AppelDLL32("yaz.dll","_ZOOM_record_get@12",Zoom_record_taille,"render",0)
// Fin du programme en windev
Mon problème est sur la dernière fonction appelée qui est "_ZOOM__record_get". La fonction renvoi un pointeur sur une chaîne de caractère comme spécifiée dans le programme source en C décris plus haut. Ma variable "Zoom_record" me donne un entier qui est probablement l'adresse du pointeur. Je ne sait pas comment faire pour récupéré le contenu.
Si je me trompe pas en langage C dans le programme décrit plus haut la commande : printf ("%s\n", rec) imprime normalement le contenu de la variable "rec" donc dans mon programme en C je doit pouvoir arriver au même résultat en windev.
Est ce qu'il faut déclarer la variable "Zoom_record" en pointeur ? |
| |
| |
| | | |
|
| | |
| |
Posted on May, 21 2005 - 2:19 PM |
Salut,
essais la fonction suivante maChaine = ChaîneRécupère (Zoom_record,crAdresseASCIIZ )
Mathieu
"Ali MAHMOUDI" <ali.mahmoudi@assistere.fr> a écrit dans le message de news: 428dfb72$1@news.pcsoft.fr...
Bonjour;
Voci le programme source en C de la dll
#include <stdio.h> #include <yaz/zoom.h>
int main(int argc, char **argv) { ZOOM_connection z = ZOOM_connection_new ("z3950.loc.gov:7090/Voyager", 0); ZOOM_resultset r; const char *rec;
ZOOM_connection_option_set(z, "preferredRecordSyntax", "USMARC"); r = ZOOM_connection_search_pqf(z, "@attr 1=7 0253333490"); rec = ZOOM_record_get (ZOOM_resultset_record (r, 0), "render", 0); if (rec) printf ("%s\n", rec); return 0; }
//fin du programme en C
Voici le programme en windev :
Zoom_connection,nIdConnexion,Zoom_resultset,Zoom_record_taille,hInst sont des entiers Zoom_record est une chaine
hInst =ChargeDLL("yaz.dll") // //Connexion Zoom_connection=AppelDLL32("yaz.dll","_ZOOM_connection_new@8","z3950.loc.gov:7090/Voyager",0) // //options of surch AppelDLL32("yaz.dll","_ZOOM_connection_option_set@12",Zoom_connection, "preferredRecordSyntax",="USMARC") // //Surch // Zoom_resultset=AppelDLL32("yaz.dll","_ZOOM_connection_search_pqf@8",Zoom_connection, "@attr 1=7 0253333490") // //Reccord
Zoom_record_taille=AppelDLL32("yaz.dll","_ZOOM_resultset_record@8",Zoom_resultset,0) Zoom_record=AppelDLL32("yaz.dll","_ZOOM_record_get@12",Zoom_record_taille,"render",0)
// Fin du programme en windev
Mon problème est sur la dernière fonction appelée qui est "_ZOOM__record_get". La fonction renvoi un pointeur sur une chaîne de caractère comme spécifiée dans le programme source en C décris plus haut. Ma variable "Zoom_record" me donne un entier qui est probablement l'adresse du pointeur. Je ne sait pas comment faire pour récupéré le contenu.
Si je me trompe pas en langage C dans le programme décrit plus haut la commande : printf ("%s\n", rec) imprime normalement le contenu de la variable "rec" donc dans mon programme en C je doit pouvoir arriver au même résultat en windev.
Est ce qu'il faut déclarer la variable "Zoom_record" en pointeur ?
|
| |
| |
| | | |
|
| | |
| |
Posted on May, 25 2005 - 7:14 PM |
Merci pour ta réponse. Je vais faire des tests. |
| |
| |
| | | |
|
| | |
| |
Posted on May, 27 2005 - 6:18 PM |
Salut Mathieu
J'ai fait un test est en plus ça marche.
Il me reste comême un petit sousis.
est ce que la fonction :
maChaine = ChaîneRécupère (Zoom_record,crAdresseASCIIZ ) Récupère tout le contenu de ma chaine "Zoom_record" ou juste une partie.
Parceque en fait j'attend un ensemble d'enregistrement et la fonction "Chainerécupère" me récupère un seul.
Ou bien c'est la fonction de la dll qui m'envoi un seul enregistrement.
Je ne sais si ça peut t'aider :
dans mon exemple la variable "Zoom_record" qui est l'adresse mémoire de la chaine est égale à 1666912
Merci pour ton aide. |
| |
| |
| | | |
|
| | |
| |
Posted on May, 30 2005 - 12:27 PM |
Salut Mathieu
Problème résolu. Finalement c'est c'est la fonction de la dll qui m'envoi un seul enregistrement et j'ai trouvé comment recupéré le tout.
Merci. |
| |
| |
| | | |
|
| | |
| |
Posted on April, 27 2006 - 9:10 PM |
Bonjour,
J'ai commencé à m'interesser à cette norme mais je bute sur l'utilisation de la dll, faute de doc très claire.
Comment entre t on les login et mot de passe? Je m'inspire un peu du code ci dessus mais ça ne marche pas (J'ai plus de succès avec VB6 mais je prefere Windev.)
Merci de votre aide Cordialement
JH |
| |
| |
| | | |
|
| | | | |
| | |
|