2011-03-09 4 views
2

데이터 도착시 다른 함수를 호출하기 위해 아래 함수를 사용하려고합니다. C++ 함수는 내 함수가 호출 될 새 스레드를 만듭니다. 그것은 몇 초 동안 작동하지만 다음 오류가 발생합니다 : Unhandled exception at 0x7725158e in threadTest.exe: 0xC0000005: Access violation.Pinvoke C# : 위임 된 함수가 충돌을 일으킴

(i "가이 오류를보고 관리되지 않는 코드 디버깅을 사용"설정 한) 나는 모든 것이 잘 작동 위임 된 기능에서 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

+0

@Tistatos 작동되었음을 알려 주셔서 감사합니다! –

+0

나는 같은 문제가 있지만'cdecl'과'stdcall'을 이해할 수 없다. 설명해 주시겠습니까? – STF