Appeler une fonction externe avec un tableau comme parametre de passage !

chichiboof Messages postés 17 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 17 juillet 2009 - 21 déc. 2005 à 10:44
 cs_med_aatif - 14 mai 2008 à 22:14
bonjour !
je suis une nouvelle sur ce forum et sur VBA mais ancienne en programmation !!
et mon problem est le suivant :
je travail sur ArcGis(cartographie) et je dois rajouter un plugIn qui me permetra d'utiliser via un activex des fonctions externes !(en VC++)
je dois faire appel a une fonction avec un tableau comme paramettre de passage
et puisque cette fct n'est pas conçue en VBA comment faire pour l'appeler (sans byRef et byVal )

23 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
24 déc. 2005 à 18:25
salut,



un prototype de la fonction C++ serait le bienvenu..Declare Function
machin alias "_machin@4" lib "truc.dll"(ByRef tab() as Long) as long
donne extern "C" int _stdcall machin(int* tab);...

ShareVB
0
chichiboof Messages postés 17 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 17 juillet 2009
26 déc. 2005 à 10:16
salut ! merci je peux avoire un peu plus de detaille sitpl !!
Hi ! I am Just Me
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
26 déc. 2005 à 18:49
salut,



donne le protoype de la fonction C que je puisse le traduire en VBA...

ShareVB
0
chichiboof Messages postés 17 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 17 juillet 2009
27 déc. 2005 à 12:36
merci ,c que je n'avais pas sure place le prototype .alors c'est le suivant:

LONG AddObject(Id, Name, lId, FALSE, tableau1 , lNb1,tableau2, lNb2, 0, 0);

j'espere que c'est claire !

Hi ! I am Just Me
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 déc. 2005 à 12:51
Je suppose que ta fonction est dans une DLL
Le proto de la fonction
me laisse a penser que ca n'est pas un object COM (ce n'est pas là une
méthode, c'est une fonction), il faut donc utiliser des appels API...

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
chichiboof Messages postés 17 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 17 juillet 2009
27 déc. 2005 à 14:09
salut !! mais devrais je le faire ! peux tu me donner un exemple
merci !!
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
27 déc. 2005 à 15:11
salut,



il manque des choses :

-> les types des paramètres ??? Id, Name ca ne suffit pas...

-> la convention d'appel (_stdcall, cdecl, pascal, thiscall) ???


=> donne le vrai prototype C/C++


ShareVB
0
chichiboof Messages postés 17 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 17 juillet 2009
27 déc. 2005 à 15:58
resalut je mexecuse c vrais ! voici le protype complet

long AddObject(long lLayerId, BSTR szName, long lObjectId, short bOwnerDraw, double* pPoints, long lNbPoints, long* partPoints, long lNbPart, short bConvert, BSTR szProjection);

et bon courrage
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 déc. 2005 à 16:10
la déclaration d'API donnerai a priori :

declare function AddObject lib "C:\MaDll.dll" ( byval lLayerId as long, byval szName as string, byval lObjectId as long, byval bOwnerDraw as integer, byval pPoints as long, byval lNbPoints as long, byval partPoints as long, byval lNbPart as long, byval bConvert as integer, byval szProjection as String) as Long
0
chichiboof Messages postés 17 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 17 juillet 2009
27 déc. 2005 à 16:19
une seconde ,je n'ai jamais de ma vie créer une api
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 déc. 2005 à 16:38
ta dll C exporte bien ta fonction AddObject ??
0
chichiboof Messages postés 17 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 17 juillet 2009
28 déc. 2005 à 14:47
slt !
beh je suis pettr trés null en vba ,j'ai redeclaré cette fct dans l'espace résérvé aux variables globales :-/ !! et puis riens n'a changé

une petite question aussi ! qu'est ce qui ce passe au juste avec cette redéclaration .

merci d'avance ! sans vous je ne pourrais pas redemmarer !
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 déc. 2005 à 15:14
tu l'as semble t'il bien déclaré.
Maintenant, tu dois pouvoir appeler ta fonction AddObject, depuis ton code VBA (a condition que ta dll exporte bien cette fonction)

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
chichiboof Messages postés 17 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 17 juillet 2009
28 déc. 2005 à 15:23
mais justement je ne trouve aucune dll crée !
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 déc. 2005 à 15:39
donc, pour résumer, tu souhaite utiliser une fonction, mais tu ne sais pas ou elle se trouve....

ca va pas etre simple de t'aider ^^

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
chichiboof Messages postés 17 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 17 juillet 2009
28 déc. 2005 à 16:20
au fait c un activeX (OCX) donc maintenant comment faire!!
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 déc. 2005 à 16:50
ah ! c'est juste un activeX....

il te suffit de créer ton objet :

Set Obj = CreateObject("MonActiveX.NomDeMonObjet")
Obj.AddObject ( ..... )
0
chichiboof Messages postés 17 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 17 juillet 2009
28 déc. 2005 à 17:25
un grand Merci demain je vous donnerais la reponse !
trés bonne fin de journée ! bye :-)
0
chichiboof Messages postés 17 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 17 juillet 2009
29 déc. 2005 à 10:37
au fait c ce que je fesais presque au debut ,


mais bon j'ai declaré l'obj et puis il me dit que user-defined type not defined


et juste une remarque avec ca : Obj.AddObject (ici yaura toujours le mm pbm non !)

Hi ! I am Just Me
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
29 déc. 2005 à 12:07
salut,



sinon essais de faire une TypeLib pour VB avec l'interface de ton
objet, tu l'importe s en référence et tu déclares Obj du type de ton
interface...comme ça tu pourras mieux débuger...pour les typelib
compatible VB, il faut utiliser mktyplib...

http://www.vbfrance.com/tutorial.aspx?ID=165

ShareVB
0
Rejoignez-nous