Как передать функцию обратного вызова C ++ в программу VB.NET? - PullRequest
0 голосов
/ 01 октября 2011

Я пытаюсь передать функцию обратного вызова из dll C ++ в приложение VB.NET. Вот мой текущий код C ++:

void DLL_EXPORT registerEvent( void (*callBackFunction)(string str),string str) 
    {
        callBackFunction(str);
    }

void  test(string str)
    {
      MessageBoxA(0,str.c_str(), "",MB_OK);
    }

LRESULT CALLBACK keyHandler(int nCode, WPARAM wParam, LPARAM lParam)

    {
      ...
     registerEvent(&test, txt); //txt = the text received after user input with some additions
     return CallNextHookEx(hookHandle, nCode,
        wParam, lParam);
    }

Это работает внутри C ++ dll (окно сообщения вызывается с правильным текстом) Но я хотел бы «запустить» процедуру тестирования в приложении VB с текстом, например, для использования окна сообщений VB.

Вот мой текущий код VB.NET:

 Public Delegate Sub Callback(ByVal str As String)

 Private Declare Sub registerEvent Lib "path\mycppdll.dll" _
    (ByVal cb As Callback, ByVal str As String)

 Dim cb As New Callback(AddressOf CallBackFunc)
 Public Sub CallBackFunc(ByVal str As String)
  'this should be the equivalent of the "test" proc in c++ but it's not triggered

 End Sub

Я думаю, что что-то упустил ??! Любая помощь будет оценена!

1 Ответ

0 голосов
/ 01 октября 2011

Код C ++ должен иметь связь extern C, иначе код VB не сможет его увидеть.Оберните соответствующие объявления в заголовке с помощью

extern "C" {
    // declarations here
}
...