用C#写ActiveX

 建“Windows窗体控件库”类型的项目

 

设置程序集的可访问性 

AssemblyInfo.cs加入以下代码:

using System.Security; [assembly: AllowPartiallyTrustedCallers]

 

做“允许与COM交互”的相关设置 

打开项目的属性页面后, 在“应用程序”选项卡中,
点击“程序集信息
...”,勾选“使使程序集C0M 可见”;

在“生成”选项卡中,勾选“为COM互操作注册”。

 

 

建安全接口

若不实现此接口,那在使用时必须修改IE安全属性“对没有标记为安全的ActiveX控件进行初始化和运行”。

[ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] public interface IObjectSafety { [PreserveSig] void GetInterfacceSafyOptions( int riid, out int pdwSupportedOptions, out int pdwEnabledOptions); [PreserveSig] void SetInterfaceSafetyOptions( int riid, int dwOptionsSetMask, int dwEnabledOptions); }

 

用户控件示例

 using System.Runtime.InteropServices; [Guid("7CDF344D-A42D-44e0-A5B5-4562288B6A38")] [ComVisible(true)] public partial class UserControl1: UserControl, IObjectSafety { public string Message { get; set; } public mshtml.HTMLWindow2Class Html { private get; set; } #region IObjectSafety 成员 public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions) { pdwSupportedOptions = 1; pdwEnabledOptions = 2; } public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions) { throw new NotImplementedException(); } #endregion public void ShowMessage() { MessageBox.Show(Message); } private void MessageButton_Click(object sender, EventArgs e) { ShowMessage(); } private void JsButton_Click(object sender, EventArgs e) { Html.execScript(string.Format("document.getElementById('numberText').value='{0}';", DateTime.Now), "javascript"); } }

 

HTML示例

<div> <object id="myActiveX" classid="clsid:7CDF344D-A42D-44e0-A5B5-4562288B6A38"> <param name="Message" value="当前属性由param参数赋值成功" /> </object> <input type='button' οnclick='myActiveX.Message="当前属性由js赋值成功"; myActiveX.ShowMessage()' value='用js和控件交互' /> <input type="text" id="numberText" readonly="readonly" /> </div> <script type="text/javascript" language="javascript"><!-- window.onload = function() { document.myActiveX.Html = this; }; // --></script>

 

为此ActiveX做安装包,以用于客户机上手动安装

 使用.net做的ActiveX无法直接使用Regsvr32.exe进行安装注册。

 VS会生成cabmsisetup.exe三种类型的文件

 

若为使客户机上自动提示安装,要为安装程序加数字签名

 打开“Visual Studio 2008命令行”后依次运行以下命令:
makecert -ss MyActiveX -n "CN=MyCorporation" -sv d:/MyActiveX.pvk -r d:/MyActiveX.cer
cert2spc d:/MyActiveX.cer d:/MyActiveX.spc
signtool signwizard

 

 

参考资料

ActiveX控件开发实践

C#ActiveX控件及制作CAB包

Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(1)

Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(2)

Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(3)

 

下载

 

转载于:https://www.cnblogs.com/beta2013/archive/2010/07/13/3377336.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值