1
在启用/ EHsc的情况下,Microsoft批准的设置线程名称的方式不会编译。编译器告诉我我可以通过/ EHsc获得“__try”条款吗?
C2712:在要求对象展开
http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx
//
// Usage: SetThreadName (-1, "MainThread");
//
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // must be 0x1000
LPCSTR szName; // pointer to name (in user addr space)
DWORD dwThreadID; // thread ID (-1=caller thread)
DWORD dwFlags; // reserved for future use, must be zero
} THREADNAME_INFO;
void SetThreadName(DWORD dwThreadID, LPCSTR szThreadName)
{
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = szThreadName;
info.dwThreadID = dwThreadID;
info.dwFlags = 0;
__try
{
RaiseException(0x406D1388, 0, sizeof(info)/sizeof(DWORD), (DWORD*)&info);
}
__except(EXCEPTION_CONTINUE_EXECUTION)
{
}
}
就如何解决这一问题,而不改变编译器设置任何想法功能无法使用__try?
在WinXP
它是__try和__except,它在MSDN文档中写错了。我从Qt复制粘贴的代码包含__except。但将它分成两个功能是可行的! – Pieter 2011-02-28 16:09:20
@Pieter:您链接到的MSDN文章包含正确的拼写'__except'。无论如何,很高兴你的工作。 – 2011-02-28 16:12:03
啊哈,你说的对。 2003版的http://msdn.microsoft.com/en-us/library/xcb2z8hs%28vs.71%29.aspx是另一版本的版本。我搞砸了我从哪里复制它。我猜可能有一个原因。 – Pieter 2011-02-28 16:17:58