Как передать функцию обратного вызова C в VB.NET программа?

#c #vb.net #delegates #callback

#c #vb.net #делегаты #обратный вызов

Вопрос:

Я пытаюсь передать функцию обратного вызова из библиотеки 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(amp;test, txt); //txt = the text received after user input with some additions
     return CallNextHookEx(hookHandle, nCode,
        wParam, lParam);
    }
  

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

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

  Public Delegate Sub Callback(ByVal str As String)

 Private Declare Sub registerEvent Lib "pathmycppdll.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:

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

 extern "C" {
    // declarations here
}
  

Комментарии:

1. Спасибо Эрнесту за ваш ответ, но я уже использовал extern C, и ничего не изменилось :/