我遇到了问题。这是结构的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 :(得分:0)
CF Marshaler无法解决这个问题。您的struct包含一个指向数据的指针,当您尝试向下发送byte []时,数据本身无法固定。
我认为第一个(LPCWSTR)可以作为字符串或StringBuilder发送(取决于数据是进入还是出现)。
LPVARSTRING更复杂。你看过OpenNETCF TAPI library了吗?在structs.cs中,有一个VarString的实现,你可能只是在该结构中实习。