好久不见了,问个问题送100分先!
现在有这些类:CMyAPP(主程序类),CMyUser,CMyDlg
COM+对象:UserOperate
在CMyApp中有一个COM+对象的指针 IUserOperatePtr m_Operate
及一个初始函数InitComAndConnectToDB
在CMyApp的Instance()中调用此函数,此函数建立对象指针并与SQL库连接
class CMyApp : public CWinApp
{
....
public:
IUserOperatePtr m_Operate;
public:
InitComAndConnectToDB();
....
};
class CMyapp::InitComAndConnectToDB
{
m_Operate.Createinstance(.....);
m_Operate->Connect(....);
.....
}
CMyApp::InitInstance(..)
{
....
InitComAndConnectToDB();
};
CMyDlg类是一个对话框类,点击此对话框的OK按钮后有以下类似代码
CMyDlg::OnMyOK
{
......
AfxBeginThread(ThreadProc,...);
....
}
在ThreadProc函数中
ThreadProc(....)
{
.....
((CMyApp*)AfxGetApp())->m_Operate->GetUserData(...); <-此句有问题
....
}
-------------------------------------
问题:
当com+(DLL)对象在本地时,一切正常,但是当com+对象不在本地时(远程调用),((CMyApp*)AfxGetApp())->m_Operate->GetUserData(...)一句会报错,错误为:“消息筛选器拒绝此调用”不知是何原因,如果不建立新建程,即把ThreadProc中的代码移到OnMyOK中就一切正常,为何??
如果在新建的线程中重定义一个COM指针,然后建立它,调用其方法就正常,就是调用APP中的COM指针不行,为什么??
我又把m_Operater定义成全局变量后在新线程中调用也不行。