【发布时间】:2015-12-13 06:59:13
【问题描述】:
我想在我的代码中声明 _WAITCHAIN_NODE_INFO 结构声明 - 用于 WCT。 我尝试按照以下教程进行操作:
https://msdn.microsoft.com/en-us/library/eshywdt7(v=vs.110).aspx
但是每次我使用 WCT 调用和我的托管结构声明时都会遇到堆损坏。
typedef struct _WAITCHAIN_NODE_INFO {
WCT_OBJECT_TYPE ObjectType;
WCT_OBJECT_STATUS ObjectStatus;
union {
struct {
WCHAR ObjectName[WCT_OBJNAME_LENGTH];
LARGE_INTEGER Timeout;
BOOL Alertable;
} LockObject;
struct {
DWORD ProcessId;
DWORD ThreadId;
DWORD WaitTime;
DWORD ContextSwitches;
} ThreadObject;
};
} WAITCHAIN_NODE_INFO, *PWAITCHAIN_NODE_INFO;
MSDN: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681422(v=vs.85).aspx
唯一不会导致堆损坏的声明是:
public struct WAITCHAIN_NODE_INFO
{
public WCT_OBJECT_TYPE ObjectType;
public WCT_OBJECT_STATUS ObjectStatus;
}
显然,我在这里缺少 LockObject 和 ThreadObject 结构的联合。
如何将此 C 结构转换为 C# 托管声明?
任何帮助将不胜感激。
【问题讨论】:
-
不知道为什么你被否决了,但这对你有帮助吗? stackoverflow.com/questions/126781/c-union-in-c-sharp
-
虽然 c++ 对我来说早已被遗忘,但这些链接可能会对您有所帮助:stackoverflow.com/questions/34139351/… & stackoverflow.com/questions/34020727/…
标签: c# c struct pinvoke unions