AddressOf

cs_MMA Messages postés 2 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 17 avril 2003 - 16 avril 2003 à 18:52
spy_EIT Messages postés 19 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 9 novembre 2007 - 11 oct. 2007 à 10:05
Salut à tous,
J'ai quelque difficulté avec AddressOf, je doit l'utiliser dans une appli qui à pour but a communication via DDE avec un simulateur.
Voici la declaration des fonctions dans le module :

...
Public Declare Function DdeInitialize Lib "user32" Alias "DdeInitializeA" (ByVal pidInst As Long, ByVal pfnCallback As Long, ByVal afCmd As Long, ByVal ulRes As Long) As Integer
...
Public Function DdeCllback(ByVal uType As Long, ByVal uFmt As Long, ByVal hConv As Long, ByVal hszTopic As Long, ByVal hszItem As Long, ByVal hData As Long, ByVal dwData1 As Long, ByVal dwData2 As Long) As Long
Return 0
End Function
...

Et voici ce que je voudrai mettre dans mon formulaire (et qui ne compile pas) :
...
If DdeInitialize(idInst, addressof Ddecllback,0,0) then exit sub
...

Il me repproche ke DdeInitialize et Ddecllback ne sont pas déclaré. En claire il ne les voit pas du formulaire. :-(

Si une bonne ame à une idée ou encore détenait un code utilisant DDE sous VB .NET via les API WIN32...
D'avance merci

MMA
Du groupuscule des Mecs ki assurent :-) ;)

1 réponse

spy_EIT Messages postés 19 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 9 novembre 2007
11 oct. 2007 à 10:05
Salut MMA,

en .NET, il faut d'abord déléguer le prototype de ta fonction de Callback, et ensuite déclarer DDEInitialize avec le type délégué comme pointeur vers cette fonction.

En clair:

1) Déléguer le prototype de la fonction de Callback (avec un autre nom, par esemple rajoute "Delegate"):

Public
Delegate
Function DDECallbackDelegate(
ByVal uType
As
Long,
ByVal uFmt
As
Long,
ByVal hConv
As
Long,
ByVal hszString1
As
Long,
ByVal hszString2
As
Long,
ByVal hData
As
Long,
ByVal dwData1
As
Long,
ByVal dwData2
As
Long)
As
Integer

2) Déclarer un type 'DDECallbackDelegate' comme pointeur de fonction:

Public
Declare
FunctionDdeInitialize
Lib
"user32"
Alias
"DdeInitializeA" (
ByValpidInst
As
Long,
ByValpfnCallback
AsDDECallbackDelegate
</gras>
ByValafCmd
As
Long,
ByValulRes
As
Long)
As
Interger

3) Appeler DDEInitializeA avec Address Of:

DdeInitialize(g_lInstID, AddressOf
DDECallback, APPCMD_CLIENTONLY
Or MF_SENDMSGS
Or MF_POSTMSGS, 0)

Ca passe comme ça..... Par contre ensuite, moi j'ai un problème de violation d'accès mémoire.... donc je peux pas te dire si c'est complètement fonctionnel, ou si il y a encore un p'tit truc qui coince... (je suis entrain d'essayer de changer les types du prototype de DDAInitializeA, car il y a des incomptatibilités entre VB6 et .NET... évidemment )

Bon courage !
0
Rejoignez-nous