Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将回调函数从C++;到VB.Net_C++_Vb.net_Function_Callback_Pinvoke - Fatal编程技术网

C++ 将回调函数从C++;到VB.Net

C++ 将回调函数从C++;到VB.Net,c++,vb.net,function,callback,pinvoke,C++,Vb.net,Function,Callback,Pinvoke,我尝试将C++ API转换成VB.NET,但是这个函数太难了,我不知道如何使它有效。 以下是此函数的API文档: 设置回调函数以接收来自DLL的通知。回调的原型是: typedef bool (*on_received_buffer_t)(void* inst, const unsigned char *buffer, unsigned int size); 在哪里 inst是最初传递给RemoteDllSetReceiver的指针 缓冲区和大小包含远程协议中定义的通知文本 注意:通知可

我尝试将C++ API转换成VB.NET,但是这个函数太难了,我不知道如何使它有效。 以下是此函数的API文档:


设置回调函数以接收来自DLL的通知。回调的原型是:

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

  • inst是最初传递给RemoteDllSetReceiver的指针
  • 缓冲区和大小包含远程协议中定义的通知文本
注意:通知可能以不同的线程到达(例如网络、计时器、音频)


我无法想象在收到缓冲区时我要做什么,它必须是一个委托吗?就像您可以读取的一样,此函数从DLL返回通知,如连接状态、用户id


非常感谢您的帮助。

我必须补充一点,我正在使用Visual Studio 2008和Compact Framework 3.5。我目前的工作是:

p/Invoke函数:

Private Declare Function RemoteDllSetReceiver Lib "remote_dll.dll" (ByVal inst As IntPtr, ByVal received_buf_cb As on_received_buffer_t) As Integer
Public Shared Function ReceiveMessage(ByVal inst As IntPtr, ByVal buffer() As Byte, ByVal size As Long) As Boolean

    MsgBox(buffer.ToString())

End Function
接收到的\u缓冲区\u t的委托

Public Delegate Function on_received_buffer_t(ByVal inst As IntPtr, ByVal buffer() As Byte, ByVal size As Long) As Boolean
我在代码中称之为:

RemoteDllSetReceiver(IntPtr.Zero, AddressOf ReceiveMessage)
接收消息功能:

Private Declare Function RemoteDllSetReceiver Lib "remote_dll.dll" (ByVal inst As IntPtr, ByVal received_buf_cb As on_received_buffer_t) As Integer
Public Shared Function ReceiveMessage(ByVal inst As IntPtr, ByVal buffer() As Byte, ByVal size As Long) As Boolean

    MsgBox(buffer.ToString())

End Function

感谢您

on\u received\u buffer\u t
是一个指向回调函数的指针,其原型如您所示。我不熟悉VB.NET,但是是的,它可能是一个
委托
,可能是`(我刚刚从中复制和粘贴的)。提到它是什么API可能会有所帮助,也许会给出不起作用的代码示例?这应该是对您的问题的注释或编辑,而不是回答。代码中的调用似乎起作用,它不会引发异常,但当API尝试返回通知时,程序会突然退出,而不会显示错误或异常。所以我不能调试它,看看会发生什么。我认为委托的声明不正确,或者我如何将委托发送到P/Invoke函数(AddressOf)。