Вариант 1:
-импорт
[DllImport("my.dll", CharSet = CharSet.Ansi, EntryPoint="Command")]
public static extern UDT1 Command1(UDT1 udt);
-объявление класса
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi)]
public class UDT1
{
[MarshalAs(UnmanagedType.U2)]
[FieldOffset(0)]
public short rxStatus;
[MarshalAs(UnmanagedType.U1)]
[FieldOffset(2)]
public byte datalen;
[FieldOffset(3)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 255)]
public byte[] data = new byte[255];
}
--можно объявить структуру, но тогда массив нужно инициализировать в методе перед вызовом Command
--код простой
UDT1 cmd = new UDT1();
UDT1 cpy = new UDT1();
cmd.rxStatus = 0;
cmd.datalen = 1;
cmd.data[0] = (byte)ValidatorCodes.SYNC_CMD;
cpy = Validator.Command1(cmd);
--ошибка
Could not load type 'ValidatorClass.UDT1' from assembly 'ValidatorClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it contains an object field at offset 3 that is incorrectly aligned or overlapped by a non-object field.
Т.е. массив чем-то левым перекрывается, чем и почему — неясно.
Если есть возможность попробовать, могу выслать саму библиотеку на мыло.