#1 Tue 16 April 2002 23:51
- MEUNIER Thibaud
- Invité
[ArcView 3.x] Les DLL externes.
Bonjour,
Je tente de creer une DLL que j'exploiterai sous ArcView.
Cette DLL est programmee en C avec Visual Studio 6.
Puis je compte l'utiliser avec le script avenue suivant :
Code:
v= test2.dll if (File.Exists(v.AsFileName)) then cub_dll = DLL.Make(v.AsFileName) LaFunction = DLLProc.Make(env_cub_dll, InitEnvCUB , #DLLPROC_TYPE_INT32,{#DLLPROC_TYPE_INT32}) retour = LaFunction.Call({0}) cub_dll = Nil addFunction = Nil av.PurgeObjects end
Cela me semble conforme a la doc mais ca ne marche pas.
L' appel a DLLProc.Make me renvoie un objet NIL.
Quelqu'un a-t-il une suggestion ?
Je pense que c'est lie a ma facon d'exporter ma function dans la DLL.
Dans l'ideal, quelqu'un aurait-il un exemple concret a me fournir (projet Visual Studio + script Avenue) ?
Merci d'avance.
Thibaud MEUNIER, Chef de Projet Informatique
Communaute Urbaine de Brest - D.I.T.
#2 Tue 16 April 2002 23:53
- MEUNIER Thibaud
- Invité
Re: [ArcView 3.x] Les DLL externes.
Effectivement, il y a une erreur mais elle provient de la recopie pour faire le mail.
Dans le script original, les 2 noms sont coherents Il faut donc lire :
Code:
v= test2.dll if (File.Exists(v.AsFileName)) then cub_dll = DLL.Make(v.AsFileName) LaFunction = DLLProc.Make(cub_dll, InitEnvCUB , #DLLPROC_TYPE_INT32,{#DLLPROC_TYPE_INT32}) retour = LaFunction.Call({0}) cub_dll = Nil addFunction = Nil av.PurgeObjects end
Merci
#3 Tue 16 April 2002 23:55
- MEUNIER Thibaud
- Invité
Re: [ArcView 3.x] Les DLL externes.
Merci a Antoine qui m'a renvoye sur le site ESRI a l'URL
http://forums.esri.com/thread.asp?c=3&a … 4083#58888
C'est en effet la piste la plus probable.
Il faut que dans la declaration de fonction, je prenne soin de faire en sorte que le prototype soit conforme a la norme C
Cela se fait de la facon suivante dans le fichier .h
Code:
#ifdef __cplusplus extern C { #endif // ------------------------------------------- // Definitions des fonctions a exporter // ------------------------------------------- #ifdef __cplusplus } #endif
En effet sinon le compilateur C++ a tendance a enrober le nom de la fonction de fioritures pour gerer les possibilites de surcharge.