我正在尝试在另一个进程中操作远程窗口。我创建了一个CWnd的包装类,我正在尝试构造构造函数&复制构造函数。所以我的应用程序可能有多个包装类附加相同的HWND实例。
错误说:
Debug Assertion失败!
以下是示例代码:
CWnd wnd1, wnd2;
wnd1.Attach((HWND)1);
wnd2.Attach((HWND)1); // Error happens in this line
答案 0 :(得分:5)
MFC(部分)是围绕Windows API的资源管理包装器。它在HWND
和CWnd
之间保持严格的所有权关系。原生HWND
只能拥有最多一个CWnd
对象 1 。
这解释了你得到的错误。
现在解决方案:既然你不拥有外国HWND
,那么将它附加到CWnd
已经是错误的做法了。由于CWnd
只提供资源管理(您不需要资源管理),它不会为您买任何东西。
解决方案:删除MFC。将HWND
与Windows API一起使用。
<小时/> 1 MFC通过保留当前附加到
HWND
个对象的所有CWnd
的列表来检查此不变量。 CWnd::FromHandlePermanent
是对该列表的查找。如果它返回非NULL值,则会触发断言。