2010-10-20 66 views
0

我想將C++ API轉換爲VB.Net,但是這個函數太難了,我不知道如何使它工作。將回調函數從C++轉換爲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); 

  • 研究所是最初傳遞給RemoteDllSetReceiver
  • 緩衝&大小包含爲遠程協議中規定的通知文本的指針。

注意:通知可能會到達不同的線程(例如網絡,計時器,音頻)。


我無法想象我在做什麼on_received_buffer_t,它必須是一個委託?就像你可以閱讀,這個函數返回DLL的通知,如連接狀態,用戶ID ...

任何幫助將不勝感激,謝謝。

+0

'on_received_buffer_t'是指向與原型的回調函數,你已經證明。我不熟悉VB.NET,但是是的,可能它必須是'委託',可能'(我剛剛從[這裏]複製並粘貼(http://www.pcreview。 co.uk/forums/thread-2339674.php))。它可能有助於提及它是什麼API,並可能舉例說明不起作用的代碼? – 2010-10-20 09:48:23

回答

0

我必須補充說我使用的是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 

委託received_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 

感謝

+1

這應該是一個評論或編輯您的問題,而不是答案。 – 2010-10-20 12:01:11

+0

該代碼是否有效? – 2010-10-21 01:55:42

+0

代碼中的調用似乎可行,它不會拋出異常,但是當API嘗試返回通知時,程序突然退出而不顯示錯誤或異常。所以我不能調試它,看看發生了什麼。 我認爲委託的聲明是不正確的,或者我可能如何將委託發送給P/Invoke函數(AddressOf)。 – Borjolujo 2010-10-21 09:04:02