描述:
做了一个activex, 在网页中嵌入使用, 目前嵌入对象用的是:
<object
classid="CLSID:E1A66278-D0AD-436C-BB19-00D78FA7F4C1" name="UpLoadDlg"
id="UpLoadDlg" width=0 height=0>
传递参数, 调用方法:
document.getElementById("UpLoadDlg").Folder = "aaa";
document.getElementById("UpLoadDlg").UserID = "bbb";
document.getElementById("UpLoadDlg").Sid = "ccc";
document.getElementById("UpLoadDlg").Run();
调用activex的方法就不说了, 现在的 问题是希望在网页中能够用
<object
classid="CLSID:E1A66278-D0AD-436C-BB19-00D78FA7F4C1" name="UpLoadDlg"
id="UpLoadDlg" width=0 height=0 codebase="UpLoad.CAB#version=1,0,1,3"">
<param name="Folder" value="aaa">
<param name="UserID" value="bbb">
<param name="Sid" value="ccc">
</object>
的形式嵌入对象并传递参数, 也就是说第一要把activex做成一个自注册的cab包
第二好像在开发的时候要作些工作才能支持<param name="Sid" value="ccc">形式的参数传递
目前我的Folder, UserID, Sid都是自动化接口提供的属性, 听说要做成“控件属性”才能支持以上形式的参数传递, 请问一下, 该如何让我的控件做到这一点, 需要改odl文件? 还是其他什么?
控件安装的问题, 决定提供一个exe安装包供用户下载使用, 但在网页中还是要用cab包
我用IExpress做了一个Activex cab安装包, 也参照网易那个控件的格式放了一个inf安装文件进去
但使用中好像效果不对, 没有象3721那种自动下载, 然后有个提示“是否安装。。。”之类的。
是不是因为我的控件没有安全认证?
解决方案1:
抢分来了,活活
http://www.vckbase.com/document/viewdoc/?id=1547
是不是因为我的控件没有安全认证?
是的,cab要进行签证,才有你说的那种提示效果;或者可以做到改变客户端的ie安全级别,允许没有签证的cab.
调用activex的方法就不说了, 现在的 问题是希望在网页中能够用
你所要的这个功能是ActiveX属性包的实现。网上很多的,以下是我写的日志:
1)描述:在ActiveX中,增加属性包后,在网页中可以通过属性包在控件初始化前将参数传入控件中,如下:
<object id='' classid=''>
<param name='str' value='test'>
</object>
2)步骤:
a)为控件接口添加属性.在WorkSpace中,右击接口名,选择"Add property"后,在property中分别添入参数类型(BSTR)和属性名(Name)即可.
b)在类中加入继承 public IPersistPropertyBagImpl<CXXX>,并添加响应的接口映射,如下;
BEGIN_COM_MAP(CXXX)
COM_INTERFACE_ENTRY(IPersistPropertyBag)
END_COM_MAP()
BEGIN_PROP_MAP(CXXX)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
// Example entries
// PROP_ENTRY("Property Description", dispid, clsid)
// PROP_PAGE(CLSID_StockColorPage)
PROP_ENTRY("Name", 6, CLSID_NULL) // 6 -> dispid,dispid为接口属性的id
END_PROP_MAP()
你可以通过双击接口,在接口定义中看到dispid.如下:id(6)
[propget, id(6), helpstring("property Name")] HRESULT Name([out, retval] BSTR *pVal);
[propput, id(6), helpstring("property Name")] HRESULT Name([in] BSTR newVal);
c)定义一个成员变量,用来存放传入的参数.CComBSTR m_bstrValue;在你定义的属性中,(加入如下黑体的行)用以保存传进来的参数值.
STDMETHODIMP CVMShow::get_Name(BSTR *pVal)
{
*pVal = m_bstrValue.Copy();
return S_OK;
}
STDMETHODIMP CVMShow::put_Name(BSTR newVal)
{
m_bstrValue= newVal;
return S_OK;
}
d)网页的交互为,如果控件有窗口的话.(这些交互在ActiveX对话框的初始化前就进行了)
<object id='' classid=''>
<param name='Name' value='test'>
</object>
http://msdn.microsoft.com/library/default.asp?url=/workshop/components/activex/safety.asp