[S] ★★★150分,再次挑战COM高手!盼高人释疑!★★★

Semigod 2004-12-22 06:23:53
MFC中,在自己写的CHtmlView中添加了一个接口,
SetHandler(VARIANT vt);

通过页面中Javascript调用这个接口:

function Test()
{
alert("调用成功!");
}
window.external.SetHandler(Test);

跟踪进入SetHandler()后,发现JavaScript传入的是一个IDispatch接口,我现在想通过这个接口调用传入的函数对象,该怎么办?我怎么知道传入的函数的dispid是什么,更不知道传入函数的名称是什么。 IE是怎么处理类似问题的?

盼高人释疑!
...全文
183 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtaylin 2004-12-23
  • 打赏
  • 举报
回复
学习
Semigod 2004-12-23
  • 打赏
  • 举报
回复
谢啦,搞定
天限天空 2004-12-23
  • 打赏
  • 举报
回复
http://blog.csdn.net/newkey007/archive/2004/08/10/70139.aspx
  • 打赏
  • 举报
回复
function jsTestFunc( a , b )
{
this.a = a;
this.b = b;

this.test = jsObjMethod;
}

function jsObjMethod( c )
{
alert( this.a + " " + this.b + " " + c );
}

tt.TestFunc( new jsTestFunc( 1 , 2 ) );



STDMETHODIMP CCSDNTest::TestFunc(VARIANT *var)
{
CComPtr< IDispatch > objTest = _variant_t( var );
CComVariant varR;
CComVariant parm[1];
parm[0] = OLESTR("12312");

DISPID dispid;
OLECHAR * strFunc = OLESTR( "test" );

HRESULT hr = objTest->GetIDsOfNames( IID_NULL , &strFunc , 1 , LOCALE_SYSTEM_DEFAULT , &dispid );

if( FAILED( hr ) ) return hr;

DISPPARAMS disp = { parm , NULL , 1 , 0 };

return objTest->Invoke( dispid , IID_NULL , LOCALE_SYSTEM_DEFAULT , DISPATCH_METHOD ,
&disp , &varR , NULL , NULL );

}
  • 打赏
  • 举报
回复
<object name='tt' id='tt' classid="clsid:9A819C7E-E4C8-41C1-B5D2-473B62BB9929"></object>
<SCRIPT LANGUAGE="JavaScript">
function jsTestFunc( a , b )
{
alert( a );
alert( b );
alert( a + b );
}
tt.TestFunc( jsTestFunc );
</SCRIPT>
</BODY>
</HTML>


STDMETHODIMP CCSDNTest::TestFunc(VARIANT *var)
{
CComPtr< IDispatch > objTest = _variant_t( var );
CComVariant varR;
CComVariant parm[2];
parm[0] = 1;
parm[1] = 2;

DISPPARAMS disp = { parm, NULL, 2, 0 };
objTest->Invoke( 0 , IID_NULL , LOCALE_SYSTEM_DEFAULT , DISPATCH_METHOD ,
&disp , &varR , NULL , NULL );

return S_OK;
}

3,245

社区成员

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

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