从DLL中导出类做基类,为什么new之后(仅仅只是构造函数完成之后)m_hWnd就被赋值了?
我有一个类A,类A继承自CDialog,从一个MFC扩展DLL中导出。
我由一个类B,在另外一个普通的DLL中,这个类B派生自类A。
当我B bObject = new B();的时候,会发现bObject->m_hWnd已经被赋值了,于是后面的Domodal之类的操作就assert不断(因为m_hWnd不为NULL),最后Domodal成功以后,sendmessage也不停的assert,因为IsWindow(m_hWnd)失败了。
另外在调试的过程,在B的构造函数中,我查看this指针
发现B bObject 的this指针指向的前两个对象都是A ,一个名字是[A](就是在类名外面带了一个中括号),一个名字是A,其中[A]里面的赋值是正确的,比如IDD,以及runtimeclass,m_hWnd为NULL 等等,另外那个A的对象是错误的:IDD不对,没有runtimeclass等对象,m_hWnd也不为NULL。查看汇编发现,B的构造函数从A的构造函数返回之后,会由一个调整vptr的offside的操作,这个操作之后this指针的[A]项不见了,只剩下了A项,也就是这个错误项。
另外,我调试的时候在A的构造函数里,所看见的赋值情况应该就是B 的this指针所指向的[A],this所指向的那个A,不知道是哪里冒出来的。
求各位达达指点下,这个问题我是在是摸不着头脑,毕竟我的B类仅仅只是实例化,调用了构造函数而已,并没有create之类的操作,m_hwnd不应该被赋值,难道是清理堆栈的时候出现的问题么? 那个B的this指针里面所出现[A]和A完全把我弄糊涂了。。。。
本人分不多。。。。请大家友情援手~~~~