Pinvoke C #: делегированная функция вызывает сбой - PullRequest
2 голосов
/ 09 марта 2011

Я пытаюсь использовать функцию ниже, чтобы отобразить другую функцию, которая будет вызываться при поступлении данных.функция C ++ создает новый поток, в котором будет вызываться моя функция.это работает в течение нескольких секунд, но затем я получаю ошибку: (я включил «включить отладку неуправляемого кода, чтобы увидеть эту ошибку») Unhandled exception at 0x7725158e in threadTest.exe: 0xC0000005: Access violation.

Если я удаляю IntPtr frameData из делегированной функции всеработает нормально, поэтому я подозреваю, что я должен что-то сделать с объявлением класса делегата, чтобы этого не происходило.

C # код:

public delegate void HandlerFunction(IntPtr frameData);

[DllImport("Cortex_SDK.dll")]
public extern static int Cortex_SetDataHandlerFunc(HandlerFunction function);


-----
public class myClass
{
    static HandlerFunction myFunction = new HandlerFunction(threadFunction);
    public myClass()
    {
        Cortex.Cortex_SetDataHandlerFunc(myFunction);
    }

    private static void threadFunction(IntPtr FrameData)
    {
    }
}

1 Ответ

4 голосов
/ 09 марта 2011

Я ожидаю, что это просто проблема соглашения о вызовах.Ваш код C ++ предполагает использование cdecl, а код C # предполагает использование stdcall.Просто укажите cdecl в P / Invoke, и вы должны быть золотым.

...