C#에서 C++ dll 함수를 호출하려고합니다. 이 함수는 struct를 매개 변수로 가지며 변수 aby_data [8]에 문제가 있습니다. 서명되지 않은 char []을 byte []로 정의하면 프로그램이 중단되지 않지만 데이터를받지 못합니다.C#에서 C++의 부호없는 char 배열
구조체 C++ C#
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct CMSG
{
public Int32 l_id;
public byte by_len;
public byte by_msg_lost;
public byte by_extended;
public byte by_remote;
public byte aby_data[];
public UInt32 ul_tstamp;
};
CMSG t_CANMsg[] = new CMSG[1];
t_CANMsg[0].aby_data = new byte[8];
t_CANMsg[0].aby_data[0] = 01;
t_CANMsg[0].aby_data[1] = 02;
t_CANMsg[0].aby_data[2] = 03;
t_CANMsg[0].aby_data[3] = 04;
t_CANMsg[0].aby_data[4] = 05;
t_CANMsg[0].aby_data[5] = 06;
t_CANMsg[0].aby_data[6] = 07;
t_CANMsg[0].aby_data[7] = 08;
l_retval = canSend(handle, out t_CANMsg[0], out len);
. 'out'이 이상하다는 것에 유의해라. 호출 전에 구조체를 초기화 할 때 반드시'ref' 될 필요가있다. 어쩌면 [In, Out]도 마찬가지입니다. –