Re[7]: И снова передача структуры с массивом в unmanaged фун
От: Аноним  
Дата: 27.11.06 17:11
Оценка:
Продолжаем... Что-то не выходит у Данилы каменный цветок.

Сейчас ситуация такая:


[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 памяти

Пните плиз ещё раз в верном направлении.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.