我为客户做了一个com控件有一些事件(如OnStateChange)发出,客户要求用htm调用。
一开始,一切正常htm中调用代码如下:<OBJECT ID="DvdPlayCtl" CLASSID="CLSID:EE9626A3-976C-470C-8282-07AB2FE2F85F"></OBJECT><SCRIPT language="JavaScript">DvdPlayCtl.attachEvent("OnStateChange", MyOnStateChange);function MyOnStateChange(state,info)
{
alert("state change to "+state+" ,"+info);
}
</script>
则一旦com的状态发生改变就发出OnStateChange事件,htm就可以正常接受并提示,但后来客户要求用
另一种方式声明com控件,代码如下:<SCRIPT language="JavaScript">
var DvdPlayCtl = new ActiveXObject("DvdPlayCtl.DvdPlayCtl");
</script>
即动态生成此com控件,则运行htm时以前的代码DvdPlayCtl.attachEvent部分出错:“对象不支持此操作”我有换了好几种方法,都不行,郁闷至今!
请大虾们指点!或者是com控件发出事件时有什么特别的要求还是脚本写的不对,本人com和htm都是菜鸟,还请不吝指教,哪怕有一点提示也好,先谢了!!!
一开始,一切正常htm中调用代码如下:<OBJECT ID="DvdPlayCtl" CLASSID="CLSID:EE9626A3-976C-470C-8282-07AB2FE2F85F"></OBJECT><SCRIPT language="JavaScript">DvdPlayCtl.attachEvent("OnStateChange", MyOnStateChange);function MyOnStateChange(state,info)
{
alert("state change to "+state+" ,"+info);
}
</script>
则一旦com的状态发生改变就发出OnStateChange事件,htm就可以正常接受并提示,但后来客户要求用
另一种方式声明com控件,代码如下:<SCRIPT language="JavaScript">
var DvdPlayCtl = new ActiveXObject("DvdPlayCtl.DvdPlayCtl");
</script>
即动态生成此com控件,则运行htm时以前的代码DvdPlayCtl.attachEvent部分出错:“对象不支持此操作”我有换了好几种方法,都不行,郁闷至今!
请大虾们指点!或者是com控件发出事件时有什么特别的要求还是脚本写的不对,本人com和htm都是菜鸟,还请不吝指教,哪怕有一点提示也好,先谢了!!!
MyOnStateChange(state,info);
</script>
这种方法也试过了,不行!郁闷中!!!
但我在com方面是个菜鸟,意思虽然懂了但怎么做还不太清楚,先生能否提供一点参考代码
晚辈感激不尽,在线等待中......
{
// TODO: Add your implementation code here
m_pDispatch = newVal;
return S_OK;
}3、定义成员函数void Send_Event(int state, TCHAR * info);在发送事件的函数中添加以下代码:
if (m_pDispatch != NULL)
{
CComVariant* pvars = new CComVariant[2]; pvars[1] = state;//回调函数的第一个参数
pvars[0] = info;//回调函数的第二个参数 DISPPARAMS disp = { pvars, NULL, 2, 0 };
HRESULT hr = m_pDispatch->Invoke(0, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, NULL, NULL, NULL);
delete[] pvars;
}
注意:
1、 pvars的填充与函数参数顺序是相反的
4、在htm中如下调用
<script language="JavaScript"> var DvdPlayCtl = new ActiveXObject("DvdPlayCtl.DvdPlayCtl"); DvdPlayCtl.OnStateChange = OnStateChange;
DvdPlayCtl.OnError = OnError; function OnStateChange(state,info)
{
alert("state change to "+state+" ,"+info);
}
</script>
至此一切ok,希望此贴能给相同需求的朋友们一点帮助。再次感谢大家的关注。