C#에서 구조체를 C++ 라이브러리로 전달하려고합니다. 구조체를 객체로 전달하고, C++ 함수는 그것을 포인터 (void *)로 기대합니다.어떻게 구조체를 구조체의 포인터로 마샬링합니까?
구조를 전달하는 데 문제가 있습니다.
" '매개 변수 # 1'을 마샬링 할 수 없습니다 : 여기
내가 얻을 런타임 예외 텍스트입니다 잘못된는/(이 값 유형이 구조체와 결합해야 함) 관리되지 않는 유형의 조합을 관리. "[DllImport("MockVadavLib.dll", CharSet = CharSet.Ansi)] public static extern IntPtr TheFunction([MarshalAs(UnmanagedType.LPStruct)] UserRec userRec);
정확히이 컨텍스트에서 LPStruct를 사용하는 MSDN 기사를 발견했지만.
이 내 구조 나 정렬 화에 노력하고 있습니다 :
[StructLayout(LayoutKind.Sequential)]
public struct UserRec {
[MarshalAs(UnmanagedType.I4)]
public int userParam1;
}
이것은 C++ 기능 :
MOCKVADAVLIB_API tVDACQ_CallBackRec * TheFunction(void * userParams) {...
이 경우에는 [마샬 러스]가 필요하지 않습니다. –
@Anton, 정확함 (업데이트 됨) – JaredPar
최종 작업 결과 : public static extern IntPtr TheFunction ([MarshalAs (UnmanagedType.Struct), In] ref UserRec userRec); 그리고 여기서 [MurshalAs]는 명시 적으로 지정하는 것이지만 필수는 아닙니다. –