Моделирование союзов C / C ++ в C #

У меня есть задача моделирования следующей структуры в C #:

typedef struct _SHELLEXECUTEINFO {
DWORD     cbSize;
ULONG     fMask;
HWND      hwnd;
LPCTSTR   lpVerb;
LPCTSTR   lpFile;
LPCTSTR   lpParameters;
LPCTSTR   lpDirectory;
int       nShow;
HINSTANCE hInstApp;
LPVOID    lpIDList;
LPCTSTR   lpClass;
HKEY      hkeyClass;
DWORD     dwHotKey;
union {
HANDLE hIcon;
HANDLE hMonitor;
} DUMMYUNIONNAME;
HANDLE    hProcess;
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;

Союз может быть смоделирован здесь как таковой

[StructLayout(LayoutKind.Explicit)]
struct Union
{
[FieldOffset(0)]
IntPtr hIcon;

[FieldOffset(4)]
IntPtr hMonitor;
}

Это заставило меня задуматься … так как размер IntPtr изменяется с 4 на 32-битной машине и 8 на 64-битной машине, как мне компенсировать это при использовании FieldOffset, учитывая, что в примере показано значение FieldOffset 4 для 32-битной машина?

1

Решение

На самом деле, способ моделировать union в C # это дать тоже самое FieldOffset всем членам:

[StructLayout(LayoutKind.Explicit)]
struct Union
{
[FieldOffset(0)]
IntPtr hIcon;

[FieldOffset(0)]
IntPtr hMonitor;
}

Это делает вопрос спорным: не важно, сколько места у каждого IntPtr занимает, потому что они делятся этим.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]