2010-11-22 20 views
1

, wie wir diese Strukturen (geschrieben in C++) in C# -Code wird dieseRangierung C++ Strukturen 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; 
+4

Sie gefragt haben, 10 Fragen, aber keine einzige Antwort. Das ist nicht nett. Wenn eine Frage beantwortet wurde, dann markieren Sie diese Antwort als akzeptiert (klicken Sie auf ein leeres Häkchen, das sich links von der Antwort befindet). – Dialecticus

Antwort

1

Verwendung ansi in der ersten Struktur als

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
public struct FT_USB_UNIQID 
{ 
    ...... 
} 

erhalten Sie die zweite Struktur wie diese Struktur aufgespalten enthalten gemischte Reihe von ansi und Unicode Sie diese Struktur als

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 
public struct SZNickName 
{ 
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] 
    public string NickName; 
} 

und Ihre FT_SERVER_USB_DEVICE CharSet.Ansi als

wird verwenden geteilt wird
[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; 
} 
+0

danke jalil bhai es funktioniert jetzt gut – Ehtsham

3

Like:

[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; 
} 

und diese:

[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; 
} 
+0

danke aamir, aber ich möchte fragen, dass Wetter char und wchar auf die gleiche Weise deklariert werden, oder ich sollte es UnmanagedType.Bstr verwenden und warum charset ist Unicode. Bitte leiten Sie mich an – Ehtsham

+0

Charset ist etwas, das diktiert, welche Art von Daten Sie in die Strings setzen werden. – Aamir

+0

und was ist mit char und wchar? – Ehtsham