Pinteur de fonction

Messages postés
47
Date d'inscription
mardi 4 septembre 2001
Statut
Membre
Dernière intervention
12 mars 2004
- - Dernière réponse : BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
- 8 mars 2004 à 20:55
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.
Afficher la suite 

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13
0
Merci
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
0
Merci
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
13
0
Merci
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
0
Merci
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
13
0
Merci
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++