问个activex在网页上的发布问题

captainwh 2006-04-21 10:03:38
做了一个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那种自动下载, 然后有个提示“是否安装。。。”之类的。

是不是因为我的控件没有安全认证?
...全文
552 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2006-04-21
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/library/default.asp?url=/workshop/components/activex/safety.asp
boluoCTO 2006-04-21
  • 打赏
  • 举报
回复
证书要到微软买,不买的话,只有自己做一个安装到用户机器上,不过又需要另外一个安装程序,而且用户不一定肯安。
sycnick 2006-04-21
  • 打赏
  • 举报
回复
抢分来了,活活
http://www.vckbase.com/document/viewdoc/?id=1547
hqulyc 2006-04-21
  • 打赏
  • 举报
回复
是不是因为我的控件没有安全认证?
是的,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>


3,245

社区成员

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

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