将回调函数指针作为参数从vb代码传递到c ++ dll

时间:2018-07-09 12:05:43

标签: c++ vb.net interop

从vb项目调用c ++ dll函数时遇到问题。我有一个C ++ dll函数,其原型如下:

bool registerCallbackOnDataRec(int groupID, void * func);

'func'是一个回调函数指针,需要具有以下签名:

typedef struct
{
    DWORD senderIPAddr ;
    DWORD numOfBytes ;
    BYTE* buffer ;
} ReceivedMessage ;

void DataRecFromServerMcstGroup(ReceivedMessage *msg);

我遇到了问题。我无法

  1. 在VB中传递类型为void *的回调函数指针“ func”。
  2. 在VB中声明指定签名的功能,即,其参数为指向结构'ReceivedMessage'的指针的功能。 我搜索了互联网,但找不到答案。有人,请帮助。

编辑: 在Hans Passant评论之后,我编写了一些VB代码来调用c ++函数。

Public Delegate Sub DataRecFromServerDelegate(ByVal msg As IntPtr)

Declare Function registerCallbackOnDataRec Lib "NetDLL.dll" (ByVal groupID As Integer, ByVal funcPtr As DataRecFromServerDelegate)

Public Structure ReceivedMessage
    Public senderIpAddr As UInteger
    Public numOfBytes As UInteger
    Public buffer() As Byte
End Structure

Private Sub DataRecFromServerMcstGroup(ByVal msgPtr As IntPtr)
    If msgPtr <> 0 Then
        *** Here i am not able to cast msgPtr into ReceivedMessage object ***
        PacketRecordDLL(Msg.numOfBytes, Msg.buffer)
    End If
End Sub
...
Dim varFuncPtr As DataRecFromServerDelegate = AddressOf DataRecFromServerMcstGroup

registerCallbackOnDataRec(groupID_Recording, varFuncPtr)

但这不起作用。在此代码中,我无法填补将msgPtr转换为ReceivedMessage对象的代码中的空白。我不确定其余代码是否正确。任何帮助。

0 个答案:

没有答案