Re[15]: И снова передача структуры с массивом в unmanaged фу
От: Аноним  
Дата: 28.11.06 11:43
Оценка:
После упорных и продолжительных боёв...

На данный момент работает такая конструкция, НЕ генерируя исключений.
Беда одна — в возвращаемой структуре 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);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.