banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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.

 

Pied de page des forums

Powered by FluxBB