Re[16]: И снова передача структуры с массивом в unmanaged фу
От:
Аноним
Дата:
28.11.06 11:56
Оценка:
По ходу событий...
Объявляю структуру так
[StructLayout(LayoutKind.Explicit)]
public struct UDT3
{
[FieldOffset(0)]
public short rxStatus;
[FieldOffset(2)]
public byte datalen;
[FieldOffset(3)]
public IntPtr dataPtr;
}
--генерируется ошибка, а если так
[StructLayout(LayoutKind.Explicit)]
public struct UDT3
{
[FieldOffset(0)]
public short rxStatus;
[FieldOffset(2)]
public byte datalen;
[FieldOffset(4)]
public IntPtr dataPtr;
}
то всё ок, получается byte в памяти 2 байта занимает?
Re[17]: И снова передача структуры с массивом в unmanaged фу
От:
Аноним
Дата:
28.11.06 12:33
Оценка:
Что-то ни одного MVP нет. Повымерли все что ли или вопрос слишком сложный?
Re: И снова передача структуры с массивом в unmanaged функци
От:
Аноним
Дата:
28.11.06 13:11
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Итак, есть библиотка и в ней некая unmanaged функция Command, с которой надо поработать на C#. К этой функции есть описание и пример работы на
Чтобы не гадать, было бы здорово, если бы вы привели оригинальное описание функции и типов ее параметров.
Re[2]: И снова передача структуры с массивом в unmanaged фун
От:
Аноним
Дата:
28.11.06 13:35
Оценка:
А>Чтобы не гадать, было бы здорово, если бы вы привели оригинальное описание функции и типов ее параметров.
Оригинальное описание из документации
Command
Function title: Command
Parameters: Command structure, UDT
Return value: UDT containing return data. The datalen parameter is the number of bytes in the data array. The data array, array1 contains the return data.
Function Description: Sends an SSP command to an open serial port. The UDT data structure is loaded with the data length (how many bytes in the command array). The command array contains the command and any data. rxStatus is set to the SSP address of the slave device (defaults to 0)
Visual Basic declaration:
Public Declare Function Command Lib"InnTechSSP.dll" (Src As UDT) As UDT
'Example usage for Visual Basic:Public Const POLL_CMD = &H7
Public Const OK = &HF0
' the user defined structurePublic Type UDT
rxStatus As Integer
datalen As Byte
array1(254) As Byte
End Type
Dim Cpy As UDT, Src as UDT
' send Poll command
Src.datalen = 1
Src.array1(0) = POLL_CMD
Cpy = Command(Src)
If Cpy.array1(0) <> OK Then
MsgBox"Validator comms error", vbCritical, App.ProductName
CloseComm
Exit Function
End If' Cpy.Array1 now contains the event list for the slave
Re[2]: И снова передача структуры с массивом в unmanaged фун
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Итак, есть библиотка и в ней некая unmanaged функция Command, с которой надо поработать на C#. К этой функции есть описание и пример работы на
А>Чтобы не гадать, было бы здорово, если бы вы привели оригинальное описание функции и типов ее параметров.
А самый рабочий вариант дает поиск в Google
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class UDT
{
[MarshalAs(UnmanagedType.U2)]
public short rxStatus;
[MarshalAs(UnmanagedType.U1)]
public byte dLen;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 254)]
public byte[] data = new byte[254];
}
[DllImport("InnTechSSP.dll", CharSet = CharSet.Auto)]
public static extern int Command(UDT udt, ref UDT cpy);