C# 프로그램에서 C++ DLL을 호출해야합니다. 내가의 PInvoke를 사용하여 할 노력하고있어 - 모든 VS2005 \ 2008 년 잘 작동하지만 VS 2010 마이그레이션 후, 나는이 예외가 :VS2010에서 마샬링 구조 포인터
PInvokeStackImbalance가 감지 메시지 : PInvoke를 함수에 대한 호출 ' sampleFunc '가 스택의 불균형을 일으켰습니다. 관리되는 PInvoke 서명이 관리되지 않는 대상 서명과 일치하지 않기 때문일 수 있습니다. 호출 규칙 및 의 PInvoke 서명이 대상 관리되지 않는 시그니처와 일치하는지 확인하십시오.
이 원래 C++ 프로토 타입입니다 : 여기
typedef struct {
unsigned short field1;
unsigned short field2;
} sInfo;
_declspec(dllexport) int sampleFunc(sInfo *info, char *txt);
와는 C# 코드입니다 :
[StructLayout(LayoutKind.Sequential)]
struct SInfo
{
//[MarshalAs(UnmanagedType.U1)] //also tried with the MarshalAs attr. Didn't help.
public ushort field1;
//[MarshalAs(UnmanagedType.U1)]
public ushort field2;
};
[DllImport("sampleModule.dll", CharSet=CharSet.Ansi)]
public static extern int sampleFunc(ref SInfo info, [MarshalAs(UnmanagedType.LPStr)] string txt);
내가 대신 심판 SInfo의를 IntPtr로도 그것을 시도했지만, 가지고 동일한 결과 ...
아무 도움도 받으실 수 있습니다.
감사합니다!
이 구조체에 대한 포인터는 전달 될 수 없습니다. –