描述:
1。m_xTBListener是源对象的CConnectionPoint继承对象的实例(BEGIN_CONNECTION_PART宏自动产生的)语句都没有问题。
但是在源对象里调用出接口函数是有问题,源码如下(仿msdn上的):
const CPtrArray* pConnections = m_xTBListener.GetConnections();
if (pConnections == NULL) {
AfxMessageBox("回调接口错误!");
return FALSE;
};
int cConnections = pConnections->GetSize();
ITBListener* pListener;
for (int i = 0; i < cConnections; i++)
{
pListener = (ITBListener*)(pConnections->GetAt(i));
ASSERT(pListener != NULL);
pListener->TB_Transfer(pmsg);
}
编译没有问题,但是在调用GetConnections函数时,内部的ASSERT(this)出异常。
苦思不得其错,请高手指点。
2。MFC下IConnectionPointContainer 接口的实现结构XConnPtContainer没有
FindConnectionPoint函数,我可以在源对象端调用IConnectionPointContainer
的函数吗?如何做?
谢谢。
解决立刻给分,不够加。
解决方案1:
我感觉你的第一个问题是因为:
客户调用的com的组件没有完全实例化起来,或者有两个com的组件
存在,调用时没有用到你想要的那个,你可以查一下组件进程实例的
个数情况。
提供的信息不够很难做出清晰的判断。
要使用连接点,必须在CConnectionPoint派生类的构造函数中调用EnableConnections();以初始化m_pUnkFirstConnections。
楼主的“2。MFC下IConnectionPointContainer 接口的实现结构XConnPtContainer没有
FindConnectionPoint函数,我可以在源对象端调用IConnectionPointContainer
的函数吗?如何做?”是错的。
MFC实现了IConnectionPointContainer::FindConnectionPoint的,用COleConnPtContainer的成员函数实现的(可查看MSDN),所以不存在没有实现“FindConnectionPoint函数”。只需用
INTERFACE_PART(名字可能记错)宏指定派生类实现了IConnectionPointContainer接口即可。
帮你顶一下。
解决方案4:2,当然可以在源对象端只要你实现了连接点,调用的时候Fire_XXXXXXX();就可以了!