Продолжаем... Что-то не выходит у Данилы каменный цветок.
Сейчас ситуация такая:
[DllImport("xxx.dll", CharSet = CharSet.Auto)]
public static extern UDT Command(UDT udt);
[StructLayout(LayoutKind.Sequential)]
public struct UDT
{
public ushort rxStatus;
public byte dLen;
public IntPtr data;
}
При попытке выполнить функцию ошибку получаем там, где есть комментарий
private void button5_Click(object sender, EventArgs e)
{
UDT cmd = new UDT();
UDT cpy = new UDT();
cmd.rxStatus = 0;
cmd.dLen = 1;
byte[] dataA = new byte[255];
byte[] dataB = new byte[255];
dataA[0] = (byte)ValidatorCodes.SYNC_CMD;
IntPtr arPtr = new IntPtr();
arPtr = Marshal.AllocCoTaskMem(255);
Marshal.Copy(dataA, 0, arPtr, 255);
cmd.data = arPtr;
Validator.OpenPort(1);
cpy = Validator.Command(cmd);
if (cpy.data != IntPtr.Zero)
{
---------------->Marshal.Copy(cpy.data, dataB, 0, 255);
//Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
MessageBox.Show(dataB[0].ToString());
}
Marshal.FreeCoTaskMem(arPtr);
Validator.CloseComm();
}
То есть похоже, что
а) либо всё-таки что-то не то с объявлением структуры
б) либо некорректно копируется массив из unmanaged памяти
Пните плиз ещё раз в верном направлении.