2017-04-05 64 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; 
}