Toon posts:

[Visual Basic .NET] AddressOf = Delegate, cannot convert

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil met VB.net subclassing en hooking gaan doen met een dll (msnfanatics.com staat ie ergens) daarvoor moet ik een adres van een callback funtie meegeven aan die dll, zodat ik weet wanneer er op een menu wordt geklikd oid :D

Hier ter verduidelijking: (alleen de code die er toe doet ofcourze :) )

API Call:
code:
1
Public Declare Function SetCWPMSGHook& Lib "Hook" (ByVal hwnd&, ByVal AdrCWP&, ByVal AdrMSG&)


Aanroep:
code:
1
Call SetCWPMSGHook(msblgenericForm&, 0, AddressOf callback)


Callback function:
code:
1
2
3
Public Function Callback&(ByVal hwnd&, ByVal wMsg&, ByVal wParam&, ByVal lParam&)
        Select Case wMsg
        ...


In VB6.0 gaat dit alles goed (niet zelf getest, maar word wel beweerd :) ), maar omdat met VB.net, AddressOf een Delegate word, en hij die niet kan omzetten naar Long krijg ik dit niet werkend :(.
Weet iemand hoe ik die toch om kan zetten (heb ergens gelezen met wrappen naar IntPtr, maar dat krijg ik ook niet werkend) naar long.. :?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-08 23:12
In VB6 had je een truukje om een funtiepointer in een struct te krijgen onder VB:

code:
1
2
3
4
5
Public Function FuncAddr( Address as Long ) as Long

    FuncAddr=Address

End Function


Als je deze aanroept met :

code:
1
    Dim pFunc as Long = FuncAddr( AddressOf Callback )


Misschien heb je hier wat aan?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Ik denk het niet. Hij wil het in .NET doen....

https://fgheysels.github.io/


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-08 23:12
Hmmm..hier heb je trouwens hetzelfde conversieprobleem zie ik. Kan hij een delegate kwijt in een variant zodat je die vervolgens naar long cast >:) ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • sds
  • Registratie: Juni 2002
  • Laatst online: 28-08 19:06

sds

Je zegt het zelf, adressof wordt het delegate in .NET, de declaratie wordt dan (c#, sorry vb doe ik niet aan):

code:
1
2
3
4
5
6
7
8
private delegate void MessageHookDelegate(IntPtr hwnd, Int32 wMsg, Int32 wParam, Int32 lParam);

[DllImport("hook.dll", CharSet=CharSet.Auto)]
private static extern Int32 SetCWPMSGHook(
   IntPtr hwnd, 
   MessageHookDelegate AdrCWP, 
   MessageHookDelegate AdrMSG
);

Verwijderd

Topicstarter
Maar hoe moet ik dat nou toepassen in mijn VB.net programma??? het lukt me zo niet...

Verwijderd

Topicstarter
*kick* echt niemand die een oplossing heeft???

Verwijderd

Wat je eigenlijk wil is 'n pointer doorgeven wat volgens mij in "safe" code niet is toegestaan, je zou 'n poging kunnen wagen met C# waar het wel toegestaan is met pinning/pointers te werken in unsafe code blocks.. echter nooit iets mee gedaan dus 't blijft 'n beetje "volgens mij" verhaal sorry.
Pagina: 1