Reputation: 228
how we will code these structures(Written in C++) in C#
typedef struct
{
USHORT idVendor;
USHORT idProduct;
USHORT bcdDevice;
CHAR szSerialNumber[256];
} FT_USB_UNIQID, *PFT_USB_UNIQID;
typedef struct {
FT_USB_UNIQID usbHWID;
eFtUsbDeviceStatus status;
BOOL bExcludeDevice;
BOOL bSharedManually;
ULONG ulDeviceId;
ULONG ulClientAddr;
CHAR szUsbDeviceDescr[256];
CHAR szLocationInfo[256];
WCHAR szNickName[256];
} FT_SERVER_USB_DEVICE, *PFT_SERVER_USB_DEVICE;
Upvotes: 2
Views: 750
Reputation: 124
use ansi in first structure as
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct FT_USB_UNIQID
{
......
}
you will split the second structure as this struct contain mixed string of ansi and unicode you will split this struct as
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SZNickName
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string NickName;
}
and your FT_SERVER_USB_DEVICE will use CharSet.Ansi as
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct FT_SERVER_USB_DEVICE
{
public FT_USB_UNIQID usbHWID;
public eFtUsbDeviceStatus status;
public bool bExcludeDevice;
public bool bSharedManually;
public uint ulDeviceId;
public uint ulClientAddr;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string szUsbDeviceDescr;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string szLocationInfo;
public SZNickName szNickName;
}
Upvotes: 1
Reputation: 15546
Like this:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FT_USB_UNIQID
{
public ushort idVendor;
public ushort idProduct;
public ushort bcdDevice;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string szSerialNumber;
}
and this:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FT_SERVER_USB_DEVICE
{
public FT_USB_UNIQID usbHWID;
public eFtUsbDeviceStatus status;
public bool bExcludeDevice;
public bool bSharedManually;
public uint ulDeviceId;
public uint ulClientAddr;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string szUsbDeviceDescr;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string szLocationInfo;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string szNickName;
}
Upvotes: 3