如何让网页可以支持可连接点COM组件???

rick1126 2002-07-30 07:15:09
以下是源代码部分

class ATL_NO_VTABLE CCalc :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CCalc, &CLSID_Calc>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CCalc>,
public IDispatchImpl<ICalc, &IID_ICalc, &LIBID_CALCTESTLib>,
public CProxy_ICalcEvents< CCalc >,
public IProvideClassInfo2Impl< &CLSID_Calc, NULL, &LIBID_CALCTESTLib >
{
public:
CCalc()
{
}

DECLARE_REGISTRY_RESOURCEID(IDR_CALC)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CCalc)
COM_INTERFACE_ENTRY(ICalc)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY(IProvideClassInfo)
COM_INTERFACE_ENTRY(IProvideClassInfo2)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
END_COM_MAP()

BEGIN_CONNECTION_POINT_MAP(CCalc)
CONNECTION_POINT_ENTRY(DIID__ICalcEvents)
END_CONNECTION_POINT_MAP()


.....

HRESULT Fire_OnResult(INT nEle1, INT nEle2)
{
CComVariant varResult;
T* pT = static_cast<T*>(this);
int nConnectionIndex;
CComVariant* pvars = new CComVariant[2];
int nConnections = m_vec.GetSize();

for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
{
pT->Lock();
CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);
pT->Unlock();
IDispatch* pDispatch = reinterpret_cast<IDispatch*>(sp.p);
if (pDispatch != NULL)
{
VariantClear(&varResult);
pvars[1] = nEle1;
pvars[0] = nEle2;
DISPPARAMS disp = { pvars, NULL, 2, 0 };
pDispatch->Invoke(0x1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, &varResult, NULL, NULL);
}
}
delete[] pvars;
return varResult.scode;

}
};


但是变量 "nConnections" 跟踪得到的值是零????!!!!
...全文
63 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rick1126 2002-10-01
  • 打赏
  • 举报
回复
我已经在微软新闻组解决了, 到news://news.microsft.com的ATL新闻组看相关帖子. 关键时实现IProvideClassInfo2(IProvideClassInfo2Impl), 在COM_MAP添加如下: IProvideClassInfo, IProvideClassInfo2入口, 这样就好了.
JJWorm 2002-09-27
  • 打赏
  • 举报
回复
我也刚写了个Simple COM,也碰见了。奇怪,也跟踪到Fire处,发现个数为0,
谁知道啊??? 为了测试,整个COM里面除了个触发函数,什么都还没加。这不应该是程序错误,是不是少了什么步骤,或ATL的BUG?
这个问题有点典型吧,我看PolyGon例子倒是可以,但却不是Simple COM,是个Full Contral。
rick1126 2002-07-31
  • 打赏
  • 举报
回复
你们理解错了, 既然我跟踪到了就一定触发了, 问题在于无法获得连接个数.
LLnju 2002-07-30
  • 打赏
  • 举报
回复
网页中写上:大概如此
<script language='javascript' for='youObj' event='OnResult( nEle1 , nEle2 )'>
// .....
</script>
duanrain 2002-07-30
  • 打赏
  • 举报
回复
关键是你的html是怎么写的,好像有events这个keyword可以连接connectpoint

3,248

社区成员

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

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