PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Problème avec l'utilisation des API ou APPELDLL32
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