作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的任务是在 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;
union 可以在这里建模
[StructLayout(LayoutKind.Explicit)]
struct Union
{
[FieldOffset(0)]
IntPtr hIcon;
[FieldOffset(4)]
IntPtr hMonitor;
}
这让我开始思考......由于 IntPtr 的大小在 32 位机器上从 4 变为 64 位机器上的 8,我如何在使用 FieldOffset 时对此进行补偿,假设该示例显示 FieldOffset 为 4,对于 32 位机器?
最佳答案
实际上,the way to model a union
在 C# 中是为所有成员提供相同的 FieldOffset
:
[StructLayout(LayoutKind.Explicit)]
struct Union
{
[FieldOffset(0)]
IntPtr hIcon;
[FieldOffset(0)]
IntPtr hMonitor;
}
这使问题变得毫无意义:每个 IntPtr
占用多少空间并不重要,因为它们正在共享它。
关于c# - 在 C# 中建模 C/C++ union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674050/
我是一名优秀的程序员,十分优秀!