2010-10-20 6 views
0

J'essaye de convertir l'API C++ en VB.Net, mais cette fonction est trop dure et je ne sais pas comment la faire fonctionner.Convertir la fonction de rappel de C++ en VB.Net

Voici la doc API pour cette fonction:


void RemoteDllSetReceiver(void *inst, on_received_buffer_t received_buf_cb); 

Définit une fonction de rappel pour recevoir des notifications de la DLL. Le prototype de la fonction de rappel est:

typedef bool (*on_received_buffer_t)(void* inst, const unsigned char *buffer, unsigned int size); 

  • inst est le pointeur à l'origine passé à RemoteDllSetReceiver
  • tampon & taille
  • contient le texte de notification tel que défini dans le protocole à distance.

Remarque: les notifications peuvent arriver dans différents threads (par exemple, réseau, minuterie, audio).


Je ne peux pas imaginer ce que je fais avec on_received_buffer_t mus, doit-il être un délégué? Comme vous pouvez le lire, cette fonction renvoie des notifications de la DLL comme le statut de la connexion, l'identifiant de l'utilisateur ...

Toute aide sera appréciée, merci.

+0

'on_received_buffer_t' est un pointeur vers une fonction de rappel avec prototype comme vous l'avez montré. Je ne suis pas familier avec VB.NET mais oui, probablement il doit être un 'delegate' et probablement' (que je viens de copier et coller de [ici] (http: //www.pcreview. co.uk/forums/thread-2339674.php)). Il pourrait être utile de mentionner quelle API il est, et peut-être donner un exemple du code qui ne fonctionne pas? –

Répondre

0

Je dois ajouter que j'utilise Visual Studio 2008 et Compact Framework 3.5. Mon travail actuel est:

P/Invoke Fonction:

Private Declare Function RemoteDllSetReceiver Lib "remote_dll.dll" (ByVal inst As IntPtr, ByVal received_buf_cb As on_received_buffer_t) As Integer 

délégué à received_buffer_t

Public Delegate Function on_received_buffer_t(ByVal inst As IntPtr, ByVal buffer() As Byte, ByVal size As Long) As Boolean 

Et je l'appelle dans mon code:

RemoteDllSetReceiver(IntPtr.Zero, AddressOf ReceiveMessage) 

ReceiveMessage Fonction:

Public Shared Function ReceiveMessage(ByVal inst As IntPtr, ByVal buffer() As Byte, ByVal size As Long) As Boolean 

    MsgBox(buffer.ToString()) 

End Function 

Merci

+1

Cela devrait faire un commentaire ou une modification à votre question, pas une réponse. –

+0

Est-ce que ce code fonctionne? –

+0

L'appel dans le code semble fonctionner, il ne lance pas d'exception, mais lorsque l'API essaie de renvoyer une notification, le programme se ferme soudainement sans montrer d'erreurs ou d'exceptions. Donc je ne peux pas le déboguer et voir ce qui s'est passé. Je pense que la déclaration du délégué est incorrecte, ou peut-être comment j'envoie le délégué à la fonction P/Invoke (AddressOf). – Borjolujo