关于 IDispatchPtr接口的GetIDsOfNames函数问题

huxiaoyong1983 2009-07-06 05:25:35
今天遇到一个问题,请各位高手多多指教!

小弟在实现 vc调用 WebBrowser控件里面的页面的javaScript函数,然后执行,发现了一个奇怪的问题,先贴代码,如下:
1)c++ 的代码
MSHTML::IHTMLDocument2Ptr spDoc(m_WebBrowser.GetDocument());

if (spDoc)
{
IDispatchPtr spDisp(spDoc->GetScript());
if (spDisp)
{
// Evaluate is the name of the script function.
OLECHAR FAR* szMember = L"TinyMCE::setContent";
DISPID dispid;

HRESULT hr = spDisp->GetIDsOfNames(IID_NULL, &szMember, 1,
LOCALE_SYSTEM_DEFAULT, &dispid);

if (SUCCEEDED(hr))
{
COleVariant vtResult;
static BYTE parms[] = VTS_BSTR;

COleDispatchDriver dispDriver(spDisp, FALSE);

dispDriver.InvokeHelper(dispid, DISPATCH_METHOD, VT_VARIANT,
(void*)&vtResult, parms,
"123456789");
}
}
}

2)页面的javaScript代码

a:这个页面包含了一个js文件,里面代码如下
function checksInput(key)
{
。。。。。。
}

b:这个页面还包含了另外一个js文件,先贴部分代码
function TinyMCE()
{
。。。。。。。
};
TinyMCE.prototype.setContent = function(html_content)
{
。。。。。。。
};


问题是这样的:
1)如果OLECHAR FAR* szMember = L"checksInput",c++的代码没有问题,可以正确执行javaScript函数。
2) 如果OLECHAR FAR* szMember = L"TinyMCE.prototype.setContent"或者"TinyMCE.setContent"或 者"TinyMCE::setContent",GetIDsOfNames都返回不了结果,像TinyMCE.prototype.setContent这样的函数,传入到GetIDsOfNames的时候应该写成什么样?需要变化吗?GetIDsOfNames只能够处理像
function fuction_name()
{
。。。。。
}
的函数吗?





...全文
603 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
huxiaoyong1983 2009-07-09
  • 打赏
  • 举报
回复
http://www.codeproject.com/KB/COM/jscalls.aspx,
这个地址的代码只能够对常规的js函数有作用,对于含有类的js代码没有作用的
剑心1977 2009-07-09
  • 打赏
  • 举报
回复
先创建TinyMCE的一个实例对象,然后再调用此实例的setContent方法。

如何创建TinyMCE的一个实例对象,参见:
vc++访问javascript(2)--IDispatchEx是动态脚本语言的基础

如何更自然的调用IDispatch接口的属性和方法,参见:
vb般的VC++开发(4)--调用IDispatch接口的属性和方法
wshcdr 2009-07-08
  • 打赏
  • 举报
回复
UP
蒋晟 2009-07-08
  • 打赏
  • 举报
回复
还是execscript吧
huxiaoyong1983 2009-07-08
  • 打赏
  • 举报
回复
TinyMCE是一个类,问题是如何在c++代码里面 调用 js的 类的 函数? 在c++代码 怎么构建js的 类的对象?
蒋晟 2009-07-07
  • 打赏
  • 举报
回复
TinyMCE是一个类吧,你得先有个对象才能调用它的方法
huxiaoyong1983 2009-07-06
  • 打赏
  • 举报
回复
对于
function TinyMCE()
{
。。。。。。。
};
TinyMCE.prototype.setContent = function(html_content)
{
。。。。。。。
};


函数 TinyMCE 是可以调用的,像prototype继承这样的就不行,不清楚该怎么操作,请各位大侠指点!
huxiaoyong1983 2009-07-06
  • 打赏
  • 举报
回复
TinyMCE对象只是一个Javascript写的接口,不是什么类,这个没有什么接口呀,请问具体怎么操作呀?
huxiaoyong1983 2009-07-06
  • 打赏
  • 举报
回复
这个好像不行吧,这些 Javascript函数 已经是网站上的,没有办法去改变
雪影 2009-07-06
  • 打赏
  • 举报
回复
spDoc是MSHTML::IHTMLDocument2Ptr对象的接口,GetIDsOfNames只能获取MSHTML::IHTMLDocument2Ptr对象中的函数ID。
要想获取函数TinyMCE对象中的元素,必须先要获取TinyMCE对象的接口。
oyljerry 2009-07-06
  • 打赏
  • 举报
回复
自己用Javascript函数再包一层,保持普通的函数

3,245

社区成员

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

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