学习COM有一段时间了,在学习的过程中我首先想到的一个接口函数就是ShowFrame,通过传递父窗口的相关信息,由组件创建一个子窗口。父窗口通过拥有该子窗口的标示自动对子窗口进行外观的调整使之与整个窗口更加融洽。最近的一个项目中我第一次尝试了这种模型。在主程序与COM组件都是使用MFC的环境下进行开发(VC6),其中主程序使用了bcg的界面扩展库。主程序为单视图程序。使用View窗口作为父窗口。在组件创建子窗口。该程序无法再debug编译后正确执行。在组件创建子窗口时发生断言,ASSERT_VALID宏认为父窗口的指针指向一个无效对象。但是我在调用该接口函数之前对该指针使用这个断言却不会出问题。Release编译后可以运行,但是在运行一段时间后整个程序会崩溃。后来我了解到一般产生这种问题的原因是MFC对象的指针与该对象的handle之间的关系不是肯定的,获得MFC对象的handle的方法时GetSafeHandle(),这时由于MFC各对象和Win32Handle之间的映射关系储存在TLS中。可是我并没有用到多线程阿。当时由于进度紧我又改会在主程序中显示子窗口了,没有问题。现在我又如下几个疑惑:
1.这个模型是否可行。
2.假如使用这个模型,我的问题如何解决。
3.使用其他相关类库可否避免这个问题,比如说WTL。
4.用其它的com开发方法可以高定马? 谢谢了!
1.这个模型是否可行。
2.假如使用这个模型,我的问题如何解决。
3.使用其他相关类库可否避免这个问题,比如说WTL。
4.用其它的com开发方法可以高定马? 谢谢了!
以前我做过的一个也是象这样的框架,不过我是用ATL的向导生成接口,为了我的方法可以用MFC的类和其它类型的参数我把IDL去掉了,生成自己的只在MFC下用的COM很好用,不过和DLL一样你在COM里要注意你的窗口是不是要有菜单,APP的IDLE要让COM的APP调用,不然你的菜单和工具栏不能变灰.注意如果参数里有资源ID的时候FINDRESOURCE的问题!