Проблема вот в чем, полю структуры типа байт присваивается значение "CardSeq = 0xFF;", а в
функции DLL-ки это поле структуры приходит = "FF00". Откуда берется лишний байт и как его убрать ????
Вызываю ф-цию из длл-ки, написаная на С++.
GLOBALDLL_API short GetCardIdInfo(GET_CARD_ID_INFO *CardIdInfo)
{
...
}
struct GET_CARD_ID_INFO
{
INT64 CardNr;
char DSiIxx[11];
char DExpIxx[11];
BYTE CardSeq;
DWORD IdMember;
char ErrorDescription[256];
};
Вызов из С#:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct GET_CARD_ID_INFO_TEST
{
public UInt64 CardNr;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 11)]
public string DSiIxx;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 11)]
public String DExpIxx;
public Byte CardSeq;
public UInt32 IdMember;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public String ErrorDescription;
};
[DllImport("GlobalCards.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int GetCardIdInfo(ref GET_CARD_ID_INFO_TEST CardIdInfo);