Выделение структур, содержащих ссылочные типы / массивы - PullRequest
0 голосов
/ 14 марта 2011

У меня проблема.Это определение структуры C:

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

Я использую .NET Compact Framework 3.5 на Windows CE.Я пробовал много способов упорядочить эту структуру, например:

[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, но снова с проблемами.Похоже, типы указателей не могут быть маршалированы.

1 Ответ

0 голосов
/ 14 марта 2011

CF Marshaler не может справиться с этим. Ваша структура содержит указатель на данные, и когда вы пытаетесь отправить байт [], сами данные не могут быть закреплены.

Я думаю, что первый (LPCWSTR) может быть отправлен в виде строки или StringBuilder (в зависимости от того, поступают или выходят данные).

LPVARSTRING более сложный. Вы смотрели на библиотеку OpenNETCF TAPI ? В structs.cs есть реализация VarString, которую вы, вероятно, можете просто встроить в эту структуру.

...