OVH Cloud OVH Cloud

pointeur sur fonction

7 réponses
Avatar
Nathan
Salut tout le monde

J'ai un tres gros pbm.
J'ai retourner tout le net et j'ai rien trouver ...

Comment on fait en VB6 pour appeller une fonction qui stocker dans une
variable ?

Example:
sub test()
msgbox("Test...")
end sub

sub Main()
dim fnc as long
fnc=dum(addressOf test)
call fnc
end sub

function dum(pf as long) as long
dum=pf
end function

le pbm c'est que le call fnc genere une erreur
en C c'est simple il suffit d'un * et tout il est beau mais en vb je vois
vraiment po....

Merci me donner votre avis car la je saiche sur un truc ki doit etre
vraiment simple, mais je vois po du tut comment faire ....

Nathan

7 réponses

Avatar
Majid
Essaye de voir ByRef dans la déclaration de la fonction (qui joue le role
d'un * dans C, enfin je crois) sinon regarde ByVal je sais plus.. de toute
facon ta solution est dans ces deux là.

function dum(ByRef pf as long) as long
dum=pf
end function


Majid, qui ne fait plus que poser des questions..
Avatar
Christian Hugoud - Xtrem7
Salut,

La réponse (peut être) réside dans CallByName.

On place la fonction dans un objet (typiquement une feuille) et on
utilise CallByName.

Si la fonction est placée dans un module : ça ne marche pas (à ma
connaissance et je n'ai pas eu de réponse sur le net).

Voilà...

Christian

"Nathan" a écrit dans le message de
news:%
Salut tout le monde

J'ai un tres gros pbm.
J'ai retourner tout le net et j'ai rien trouver ...

Comment on fait en VB6 pour appeller une fonction qui stocker dans une
variable ?

Example:
sub test()
msgbox("Test...")
end sub

sub Main()
dim fnc as long
fnc=dum(addressOf test)
call fnc
end sub

function dum(pf as long) as long
dum=pf
end function

le pbm c'est que le call fnc genere une erreur
en C c'est simple il suffit d'un * et tout il est beau mais en vb je


vois
vraiment po....

Merci me donner votre avis car la je saiche sur un truc ki doit etre
vraiment simple, mais je vois po du tut comment faire ....

Nathan





Avatar
François Picalausa
"Nathan" a écrit dans le message de
news:%
Comment on fait en VB6 pour appeller une fonction qui stocker dans une
variable ?

Example:
sub test()
msgbox("Test...")
end sub

sub Main()
dim fnc as long
fnc=dum(addressOf test)
call fnc
end sub

function dum(pf as long) as long
dum=pf
end function

le pbm c'est que le call fnc genere une erreur
en C c'est simple il suffit d'un * et tout il est beau mais en vb je
vois vraiment po....



Bonjour/soir,

En complément des deux autres réponses, voici une fiche utile:
http://support.microsoft.com/default.aspx?kbid1578

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
Nathan
"François Picalausa" a écrit dans le message de news:
#
"Nathan" a écrit dans le message de
news:%
> Comment on fait en VB6 pour appeller une fonction qui stocker dans une
> variable ?
>
> Example:
> sub test()
> msgbox("Test...")
> end sub
>
> sub Main()
> dim fnc as long
> fnc=dum(addressOf test)
> call fnc
> end sub
>
> function dum(pf as long) as long
> dum=pf
> end function
>
> le pbm c'est que le call fnc genere une erreur
> en C c'est simple il suffit d'un * et tout il est beau mais en vb je
> vois vraiment po....

Bonjour/soir,

En complément des deux autres réponses, voici une fiche utile:
http://support.microsoft.com/default.aspx?kbid1578

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com



Merci de ta reponce.
C'est bien ce que je pensais.
Il n'y a pas de methode propre pour resoudre se pbm.
On est obliger de cree une DLL en C pour faire cet appelle...

C'est vraiment super mal pensais !!!

Nathan
Avatar
François Picalausa
>> Bonjour/soir,

En complément des deux autres réponses, voici une fiche utile:
http://support.microsoft.com/default.aspx?kbid1578




C'est bien ce que je pensais.
Il n'y a pas de methode propre pour resoudre se pbm.
On est obliger de cree une DLL en C pour faire cet appelle...



Bonjour/soir,

Généralement, en VB, on n'appelle pas de focntion via un pointeur.
Tu récupère ce pointeur d'une API quelconque?
Sinon, il y a toujours une solution. Dis nous ce que tu souhaites faire et
nous tenterons de te donner la meilleure solution.

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
Nathan
En fait le but est de faire un analyseur de script.
J'ai un objet que j'initialise avec des paires (string,fonction)
Puis je lui demande d'analyser une ligne. Il compare avec les strings et il
appelle la fonction qui va bien avec.

Example:
Set Analyseur = new CAnalyseur()
Analyseur.Add "Str1",AddressOf Fnc1
Analyseur.Add "Str2",AddressOf Fnc2
Analyseur.Add "Str3",AddressOf Fnc3

...
Analyseur.call "Str2"

Ce script appellerait la Fnc2
(Desoler si il y a des erreur de syntaxe, mais j'ecrit a la voler et le VB
est pas mon langage de prédilection...)

Nathan



"François Picalausa" a écrit dans le message de news:

>> Bonjour/soir,
>>
>> En complément des deux autres réponses, voici une fiche utile:
>> http://support.microsoft.com/default.aspx?kbid1578
>>
>
> C'est bien ce que je pensais.
> Il n'y a pas de methode propre pour resoudre se pbm.
> On est obliger de cree une DLL en C pour faire cet appelle...

Bonjour/soir,

Généralement, en VB, on n'appelle pas de focntion via un pointeur.
Tu récupère ce pointeur d'une API quelconque?
Sinon, il y a toujours une solution. Dis nous ce que tu souhaites faire et
nous tenterons de te donner la meilleure solution.

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com




Avatar
François Picalausa
"Nathan" a écrit dans le message de
news:
En fait le but est de faire un analyseur de script.
J'ai un objet que j'initialise avec des paires (string,fonction)
Puis je lui demande d'analyser une ligne. Il compare avec les strings
et il appelle la fonction qui va bien avec.

Example:
Set Analyseur = new CAnalyseur()
Analyseur.Add "Str1",AddressOf Fnc1
Analyseur.Add "Str2",AddressOf Fnc2
Analyseur.Add "Str3",AddressOf Fnc3

...
Analyseur.call "Str2"

Ce script appellerait la Fnc2



Bonjour/soir,

CallByName devrait être la solution alors.
Tu stoque des triplets (string,nom de la procédure, objet contenant la
procédure)
et pour l'appel:
CallByName (Objet, NomProcédure, Tableau d'arguments)

le VB est pas mon langage de prédilection


Quand on sait ce qu'on peut faire avec les pointeurs, ce n'est pas étonnant
;-)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com