2011-03-09 131 views
2

我試圖使用下面的函數來映射另一個數據到達時調用的函數。 C++函數創建一個新的線程,我的函數將被調用。它工作了幾秒鐘,但後來我得到一個錯誤:(我已經變成了「啓用非託管代碼調試看到這個錯誤」) Unhandled exception at 0x7725158e in threadTest.exe: 0xC0000005: Access violation.Pinvoke C#:委託函數導致崩潰

如果我從委派的功能一切正常刪除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) 
    { 
    } 
} 

回答

4

我希望這只是一個調用約定問題。您的C++代碼假定爲cdecl,但C#代碼假定爲stdcall。只需在P/Invoke中指定cdecl,您就應該是金手指。

+0

是的,它似乎在做伎倆,謝謝! – Tistatos 2011-03-09 15:56:13

+0

@Tistatos感謝您讓我知道它的工作! – 2011-03-09 16:04:05

+0

我有同樣的問題,但我不明白什麼是'cdecl'和'stdcall'你能解釋一下嗎? – STF 2017-10-25 12:25:34