1

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 のサイズが 32 ビット マシンでは 4 から 64 ビット マシンでは 8 に変化するため、FieldOffset を使用するときにこれをどのように補正するかを考えました。機械?

4

1 に答える 1

3

実際、 C# でa をモデル化する方法unionFieldOffsetは、すべてのメンバーに同じものを与えることです。

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

    [FieldOffset(0)]
    IntPtr hMonitor;
}

IntPtrこれは質問を無意味にします:彼らはそれを共有しているので、それぞれがどれだけのスペースを占めるかは問題ではありません.

于 2013-02-03T15:32:50.083 に答える