紧急求助:使用mfc常规动态库支持自动化做的com组件在使用的时候出现和任意控件冲突问题。

sifter 2006-01-16 10:47:08
最近VC开发中遇到一个很要命的问题,把试图类的派生类封装在动态库中并且通过支持自动化做成组件,但是在用的时候只要有ocx控件同时使用且能进行窗口切换,系统准死!
请求MFC和com高手解答,为了说明情况,把做的内容简化
视图组件:
(1)使用用MFC常规动态库
(2)动态库内添加CView派生的视图类CTestView类,添加时选择“支持自动化”,
(3)CTestView保露出一个接口CreateThis(HWND hWnd,long left,long right,long top,long bottom);
使用组件:
(1)用向导新创建一个多文档工程TestMyView
(2)在CTestMyViewView类的OnCreate中创建上述组件,并调用组件的CreateThis接口函数,把当前视图窗口句柄传入,使得组件内封装的视图创建。

在这个时候视图功能一切正常,无论怎么使用都可以,不过如果在程序中添加一个控件窗口,比如在无模式对话框上拖一个日历控件,那么在对话框和程序视图窗口之间鼠标焦点切换几次后系统就会崩溃,百试百灵,有高手如果不愿意试验可以发邮件sifter@163.com要源代码例子,
请对MFC和COM内部机制比较熟悉的高手帮忙查查什么原因,快被整死了!!!!!!!!
...全文
88 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
sifter 2006-01-16
  • 打赏
  • 举报
回复
视图类组件:
1、视图类
class CBaseView : public CWnd
{
protected:
CBaseView(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CBaseView)

// Attributes
public:

// Operations
public:
long CreateThis(long hParent, long left, long top, long right, long bottom);
................
2、接口定义
。。。。。。。。。。。。。。
[ uuid(3889365C-4968-42D1-94B1-C970D3654BF7) ]
dispinterface IBaseView
{
properties:
methods:
[id(1)] long CreateThis(long hParent, long left, long top, long right, long bottom);


};
。。。。。。。。。。。。。。。。。。
3、试验工程的视图类OnCreate函数:
int CTestViewView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

m_pwndView=NULL;
COleDispatchDriver disp;
if (disp.CreateDispatch("ComView.BaseView"))
{
disp.m_lpDispatch->QueryInterface(DIID_IBaseView, (void**)&m_pwndView);
CRect rc;
GetClientRect(&rc);
m_pwndView->CreateThis((long)m_hWnd, rc.left, rc.top, rc.right, rc.bottom);
}
return 0;
}
包括其他相关函数,比如OnSize等待。
到此运行一切正常,实际使用的视图就是组件内的视图。
4、弹出带有日历的无模式对话框
void CTestViewView::OnButton32771()
{
CTestDialog* pDlg = new CTestDialog();
pDlg->Create(CTestDialog::IDD,this);
pDlg->ShowWindow(SW_SHOW);
}
5、等死...............................一分钟内准死,而且都是在鼠标从对话框移动到视图内的一瞬间。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧