Конвертировать функцию обратного вызова из C ++ в VB.Net - PullRequest
0 голосов
/ 20 октября 2010

Я пытаюсь преобразовать C ++ API в VB.Net, но эта функция слишком сложна, и я не знаю, как заставить ее работать.

Вот документация API для этой функции:


void RemoteDllSetReceiver(void *inst, on_received_buffer_t received_buf_cb);

Устанавливает функцию обратного вызова для получения уведомлений из DLL. Прототип обратного вызова:

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

Где

  • inst - указатель, первоначально переданный RemoteDllSetReceiver
  • buffer & size содержит текст уведомления, как определено в Удаленном протоколе.

Примечание: уведомления могут поступать в разных потоках (например, сеть, таймер, аудио).


Я не могу представить, что я должен делать с on_received_buffer_t, это должен быть делегат? Как вы можете прочитать, эта функция возвращает уведомления из DLL, такие как состояние соединения, идентификатор пользователя ...

Любая помощь будет оценена, спасибо.

1 Ответ

0 голосов
/ 20 октября 2010

Я должен добавить, что я использую Visual Studio 2008 и Compact Framework 3.5. Моя текущая работа:

P / Функция вызова:

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

Делегат для receive_buffer_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)

Функция ReceiveMessage:

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

    MsgBox(buffer.ToString())

End Function

Спасибо

...