2017-04-05 66 views
0

我發現了大量關於如何在網絡上編組和wchar*的信息,但現在我正試圖編組WINBIO_STRING類型,其定義爲wchar[256]。將它編組爲char[]的數組,但是然後陣列中的每個其他元素都是\0,我想避免這種情況。有沒有一種更合適的方式來封送這些數據(這是一個結構的成員,特別是WINBIO_UNIT_SCHEMA結構體)。這是我的代碼:如何編組wchar []

[StructLayout(LayoutKind.Sequential)] 
public struct BiometricUnitSchema 
{ 
    public int UnitId; 
    public BiometricPoolType PoolType; 
    public BiometricType BiometricFactor; 
    public BiometricSubtype SensorSubType; 
    public BiometricCapabilities Capabilities; 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] 
    public char[] DeviceInstanceId; 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] 
    public char[] Description; 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] 
    public char[] Manufacturer; 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] 
    public char[] Model; 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] 
    public char[] SerialNumber; 
    public BiometricVersion FirmwareVersion; 
} 

我也始終包含0 MajorVersion和MinorVersion值FirmwareVersion領域的問題,但我不知道這結果不正確或只是誤導。

回答

1

我通過將WINBIO_STRING作爲C#中的字符串而不是char []來解決此問題。我還必須在我的結構中添加一個Unicode字符集。

我的新結構:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 
public struct BiometricUnitSchema 
{ 
    public int UnitId; 
    public BiometricPoolType PoolType; 
    public BiometricType BiometricFactor; 
    public BiometricSubtype SensorSubType; 
    public BiometricCapabilities Capabilities; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] 
    public string DeviceInstanceId; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] 
    public string Description; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] 
    public string Manufacturer; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] 
    public string Model; 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] 
    public string SerialNumber; 
    public BiometricVersion FirmwareVersion; 
}