Использование функции обратного вызова C с .NET - PullRequest
0 голосов
/ 15 февраля 2012

Я использую C-библиотеку из .NET Это все работает довольно хорошо. Но у меня проблемы с функцией обратного вызова.

У меня есть этот C-код:

Bool someCallBack(const char *name, int reason)
{
    //some logic here
    return True;
}

int main(int argc, char **argv){
    SetCallback(someCallBack)
}

В заголовочном файле SetCallback определяется как:

typedef Bool (*CallbackType)(const char *name, int reason); 
#define DLL_USE __declspec(dllimport)
DLL_USE void SetCallback(CallbackType callBack);

Когда я выполняю функцию, которая запускает обратный вызов, все это прекрасно работает в C.

Теперь я хочу сделать это из .NET

В .NET у меня есть этот код

<DllImport(CST.LIBRARY_NAME, entrypoint:="SetCallback")> _
Public Shared Sub SetCallback(ByVal callBack As CallbackType)
End Sub

Delegate Function CallbackType(ByVal name As StringBuilder, ByVal reason As Integer) As Boolean

Private Function TEST(ByVal name As StringBuilder, ByVal reason As Integer) As Boolean
    Debug.WriteLine("Hello Callback")
    Return True
End Function

SetCallback(New CallbackType(AddressOf TEST))

Когда я сейчас выполняю функцию, которая запускает обратный вызов, функция обратного вызова никогда не срабатывает.

Это правильный способ взаимодействия с функцией обратного вызова? Или что еще может быть не так.

...