После упорных и продолжительных боёв...
На данный момент работает такая конструкция, НЕ генерируя исключений.
Беда одна — в возвращаемой структуре cpy указатель указывает в 0. Т.е. в никуда, а поле datalen=1, т.е. данные в массиве есть,
но указатель на них почему-то не указывает.
Если есть идеи почему, прошу высказаться.
Спасибо
[DllImport("my.dll", CharSet = CharSet.Ansi, EntryPoint = "Command")]
public static extern UDT2 Command2(UDT2 cmd);
[StructLayout(LayoutKind.Sequential)]
public struct UDT2
{
public short rxStatus;
public byte datalen;
public IntPtr dataPtr;
}
//метод...
UDT2 cmd = new UDT2();
UDT2 cpy = new UDT2();
cmd.rxStatus = 0;
cmd.datalen = 1;
byte[] dataIn = new byte[255];
byte[] dataOut = new byte[255];
dataIn[0] = 0x11;
cmd.dataPtr = Marshal.AllocHGlobal(IntPtr.Size);
Marshal.Copy(dataIn, 0, cmd.dataPtr, cmd.datalen);
cpy = Fun.Command2(cmd);
if (cpy.dataPtr != IntPtr.Zero)
{
}
Marshal.FreeHGlobal(cmd.dataPtr);