2011-03-14 68 views
0

我有问题。这是C的结构定义:包含参考类型/数组的编组结构

typedef struct _UNIMDM_CHG_DEVCFG { 
    DWORD dwCommand; 
    LPCWSTR lpszDeviceClass; 
    LPVARSTRING lpDeviceConfig; 
    DWORD dwOption; 
    DWORD dwValue; 
} UNIMDM_CHG_DEVCFG; 

我在Windows CE上使用.NET Compact Framework 3.5。我尝试过很多办法元帅这种结构中,例如:

[StructLayout(LayoutKind.Sequential)] 
internal struct UnimodemChangeDeviceConfiguration 
{ 
    public int dwCommand; 

    public byte[] lpszDeviceClass; 

    public byte[] lpDeviceConfig; 

    public int dwOption; 

    public int dwValue; 
} 

的问题是这种结构的一个实例调用Marshal.SizeOf时,它会引发NotSupportedException。为什么?我尝试使用字符串为lpszDeviceClass,但又有问题。看来指针类型不能被封送。

回答

0

CF Marshaler无法处理此问题。您的结构包含一个指向数据的指针,当您尝试向下发送一个字节[]时,数据本身不能被固定。

我认为第一个(LPCWSTR)可以作为字符串或StringBuilder发送(取决于数据是进入还是出来)。

LPVARSTRING更复杂。你看过OpenNETCF TAPI library?在structs.cs中有一个VarString的实现,您可能只需在该结构中实习即可。

+0

我看了一下,但这个班级写得不对。我自己写了一个,它很有用。问题是在其他实现中,LPVARSTRING直接转发给函数(而不是结构的一部分)。 – Bogi