pinvoke를 사용하여 데이터를 교환하는 C# 응용 프로그램에서 C DLL을 호출했습니다. 다음에서 나는 int 클래스와 2 개의 char 배열로 구성된 간단한 클래스를가집니다. 모든 것은 멋지게 작동합니다. C#은 "getStreamGroup"을 사용하여 DLL을 올바르게 호출하고 DLL은 전달 된 streamGroup 구조를 올바른 데이터로 채 웁니다.pinvoke : 구조체가 C면에 채워지지만 집에있을 때 데이터가 사라짐
그러나 C 함수가 완료되고 C# 측에 돌아 오면 전달 된 올바른 데이터로 채워진 streamGroup은 현재 불량입니다 (3 개의 null 값). VS2010의 오류/경고가 없습니다. 64 비트 앱입니다. 아이디어가 있으십니까?
#define STREAM_COUNT 9000
typedef struct s_streamGroup
{
int systemDefinedGroup;
char name[BUFFER_SIZE_128];
char streamList[STREAM_COUNT];
} streamGroup;
public class streamGroup
{
public int systemDefinedGroup;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = constants.BUFFER_SIZE_128)]
public byte[] name;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = constants.STREAM_COUNT)]
public byte[] streamList;
}
DLL int getStreamGroup(int groupIndex, streamGroup *RequestedStreamGroup)
{
*RequestedStreamGroup = Environment.StreamGroup[groupIndex];
return(DLL_NO_ERROR);
}
[DllImport(constants.DLL_PATH, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int getStreamGroup([In] int groupIndex, [In, Out] streamGroup group);
당신은 미쳤지 만, 당신은 당신의 pinvoke을 알고 있습니다! 아름답게 작동합니다 ... 그라시아 스! – PaeneInsula