Pinteur de fonction

Signaler
Messages postés
47
Date d'inscription
mardi 4 septembre 2001
Statut
Membre
Dernière intervention
12 mars 2004
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
bon je savais pas trop ou poser la question vu ke c un mix vb/c++ mé bon je pose ma question qd mm...
alors g decouvert recemment le mot-clé address of et en fait je voulais l'utiliser pr passer des pointeurs de fonctions VB vers une dll c++ mais je n'arrive pas a utiliser ces pointeurs de fonction !
est-ce ke j'essaie de faire est realisable ?(a mon avis oui...) et si oui zavé pas un ti exxemple ou une tite aide a m'apporter svp?
marchi d'avance !

VB :
clAddFunction AddressOf disp_error, "void(disp_error(char(msg)))"

on appelle une fonction d'une dll c++

C++ :

on recupere la valeur ds un FARPROC
typedef __declspec(dllimport)DWORD (*PF) (char*);
Pf f = (PF)fctn;
fctn("pouet");

euh j'ai oublié de preciser, la fonction VB prend un string en parametre.

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Salut,
Je fais abstraction de la validite ou non du code VB, pas mon domaine.
Si j'ai bien compris, tu envoies depuis DLL C une chaine vers VB ?
Meme si ton pointeur de fonction vb est valide au niveau de la DLL, VB ne connait absolument pas le pointeur char*, tu dois lui retourner l'ADRESSE d'un BSTR que tu alloues dans la DLL, sera a VB de desallouer.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
47
Date d'inscription
mardi 4 septembre 2001
Statut
Membre
Dernière intervention
12 mars 2004

non tu n'as pas bien compris :oP dsl j'ai du mal m'exprimer.
en fait ske je cherche a faire c passer un pointeur de fonction VB vers une dll C++... d'ou l'utilisation de "addressof". mais ca doit ê moi, enfin je c pa, paske ca marche pas des masses...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
J'ai donc bien compris, DLL reçoit un pointeur de fonction VB et appelle cette fonction VB en lui passant une adresse char[] ("pouet" dans ton exemple).
Le compilo C comme normal va renvoyer direct l'offset de ces octets (char*), voila ce qui est tout a fait invalide pour VB.
Voir explics post precedent.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
47
Date d'inscription
mardi 4 septembre 2001
Statut
Membre
Dernière intervention
12 mars 2004

lol vi dsl effectivement en fait c moi ki ait mal compris ! mé c paske tu parlais seulement de string alors ke moi javé "n'importe kel parametre" en tete... enfin brtef merci pr le tuyau, v voir du coté des BSTR.
ah tiens un truc ! du C++ o VB il faut utiliser des BSTR, mais pk du VB o C++ un char* fonctionne parfaitement ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Parce que c'est inscrit dans le Declare:
Declare ... maFunc(Byval p As String)
Byval indique a VB de passer un char* a une func API, bien entendu VB sait faire, mais indiquer a VB de recevoir char*, alors la nenni.

ciao...
BruNews, Admin CS, MVP Visual C++