#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, и ничего не изменилось :/