Open existe bel et bien dans la doc et je l'ai utilisé en VB.
Il va falloir utiliser IDispatch alors...
Version imprimable
Open existe bel et bien dans la doc et je l'ai utilisé en VB.
Il va falloir utiliser IDispatch alors...
Quelqu'un aurait des idées ?
Quel langage serait le mieux pour coder cette appli ?
J'ai besoin d'utiliser un type LPCTSTR (char *) pour une de mes méthodes, puis je utiliser un langage de script ? Jscript et VBscript ne permettent pas l'utilisation de ce type apparament.
LPCTSTR est TCHAR const *, qui peut être char const * ou wchar_t const * selon le mode.
Essaie ceci: définis les macros UNICODE et _UNICODE dans tes headers, et les TCHAR deviendront des wchar_t.
Je ne connais pas les langages de script, mais il y a fort à supposer qu'ils marchent uniquement en unicode. Si le composant marche avec le programme C en unicode, il devrait marcher avec le langage de script.
Sachant que j'utilise les scripts (jscript et vbscript) avec WSH si possible, je ne sais pas si je peux définir ce que tu me dis. Plus simplement, peut on faire un char* en jscript ?
ma méthode retourne plusieurs variables par le biais des paramètres et l'une d'elle est un LPCTSTR out. En vb il m'a suffit de déclarer la variable en ByRef.
Je dis que normalement, un composant OLE accepte toujours des chaînes unicode (wchar_t *) et parfois aussi des chaînes non-unicode (char *).
Sachant que les scripts sont toujours en unicode, tu ne devrais pas avoir vraiment besoin de char*.
Quelle est exactement la fonction qui demande un LPCTSTR, et où est-elle déclarée (quelle DLL, quelle classe/interface, etc).
Ok ;)
Donc en fait, pour remettre tout dans son contexte, le script que je tente de faire en C, je l'avais tenté en jscript et vbscript. Le problème a été que je n'arrivais pas a avoir les bons types pour ma fonction. J'ai donc utilisé vba pour avoir le ByRef.
Voici la doc pour ma fonction :
long GetAddressResult(long in_iResult, LPCTSTR *out_strAddress, double *out_dLati, double *out_dLongi)
Recupère les informations des adresses trouvées.
Paramètres :
in_iResult : index de la réponse.
out_strAddress : adresse trouvée.
out_dLati : position en latitude WGS84 de l’adresse trouvée.
out_dLongi : position en longitude WGS84 de l’adresse trouvée.
Valeur de retour :
Retourne 1 si OK, -1 si erreur.
Voici mon code complet en jscript [Utilisé avec CScript ou WScript]
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 var res1; var res2; var res3; var pays, ville, cp; var pays = "France"; var ville = "alès"; var cp = "30100"; var WShell,LoxAd; var WShell = WScript.CreateObject("WScript.Shell"); //Création objet Shell pour les popups et input éventuelles var LoxAd = WScript.CreateObject("LoxanePro.lxwOLEAddress");//Création de l'objet OLE LoxAd res1 = LoxAd.SelectDatabase(0,pays); //Sélection du pays (ca marche) res2 = LoxAd.SetEditAddress(0,0,ville);//Sélection de la ville (ca marche) res3 = LoxAd.SetEditAddress(0,1,cp);//Sélection du code postal (ca marche) LoxAd.SearchAddress();//lancement recherche do {} while (LoxAd.GetSearchAddressState()!=1); //attente fin de la recherche var number = LoxAd.GetAddressResultCount(); //retourne le nombre de résultat (ici 33) WShell.popup(number); //affiche le résultat var adresse; var lati; var longi; LoxAd.GetAddressResult(0,adresse,lati,longi); //la ça bloque WShell.popup(adresse);
Ta fonction, je ne la trouve que dans l'IDL, et elle ne prend pas en paramètre un LPCTSTR, mais un pointeur vers une BSTR (BSTR*, ce qui correspond en VB à ByRef String)
Désolé pour jscript et vbscript, je ne les connais pas, donc j'ignore s'ils ont un équivalent à ByRef.Code:
1
2
3
4
5
6 [id(0x0000000a)] long GetAddressResult( long in_iResult, BSTR* out_strAddress, double* out_dLati, double* out_dLongi);
PS: En C, pour les BSTR, on utilise des fonctions dédiées : voir SysAllocString() et ses soeurs.
D'accord ;) Je parlais de LPCTSTR car c'est marqué dans la doc mais pour moi c'est un char*... et c'est bien un ByRef String que j'ai fait en VB.
Merci beaucoup pour toutes tes réponses :D :hola:
J'ai résolu le problème. J'ai codé tout ça dans visual basic 2005 express et ça fonctionne très bien. Connexion aux objets OLE en une ligne.
Merci pour votre aide.