建“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会生成cab、msi、setup.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
参考资料
Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(1)
Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(2)
Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(3)
下载