在我的上一篇blog中,已经实现了一个最基本的ActiveX控件。当然,我们编写的任务还没有完成。首先,我们先尝试实现和JS的交互能力。

  我们在Demo中加入ShowMessage方法:

public void ShowMessage(string msg) { if(msg != null) { MessageBox.Show(msg); } }    
  我们重新编译。在重新访问页面之前,我们先来修改html代码:
<body bgcolor=’#223344’> <object id="helloworld" classid="clsid:9551B223-6188-4387-B293-C7D9D8173E3A" Width="184" Height="96" > </object> <br> <input type=’button’ οnclick=’helloworld.ShowMessage(“Hello World!”)’ value=’Click’> </body>

  现在,重新访问http://localhost/helloworld.htm,单击Click按钮,应该可以实现交互了。

  但是结果却很遗憾,我们发现IE跳出了对话框,如图所示


 

  单击确定之后,我们发现JS报错。根据提示,我们判断可以通过修改IE的设置使控件运行。打开IE的 工具——〉Internet选项——〉安全——〉本地Intranet——〉自定义级别——〉对没有标记为安全的ActiveX控件进行初始化和运行,将其值设为启用。我们刷新页面,现在终于可以正确运行了。

  当然,我们不能指望我们的客户和我们一样修改这个值。毕竟,一是操作麻烦,二是给电脑带来了很大的安全风险。在互联网上搜索之后,发现必须要实现IObjectSafety接口,把ActiveX控件标记为安全的ActiveX控件。在搜索MSDN之后,我找到了IObjectSafety接口的定义。这就好办了。首先我们自己用C#实现这个接口:

[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IObjectSafety { // methods void GetInterfacceSafyOptions( System.Int32 riid, out System.Int32 pdwSupportedOptions, out System.Int32 pdwEnabledOptions); void SetInterfaceSafetyOptions( System.Int32 riid, System.Int32 dwOptionsSetMask, System.Int32 dwEnabledOptions); }

  注意,这个GUID是不能改的。然后,我们在Demo类里面实现这个接口。增加一下代码:

IObjectSafety 成员

#region IObjectSafety 成员 public void GetInterfacceSafyOptions(Int32 riid, out Int32 pdwSupportedOptions, out Int32 pdwEnabledOptions) { // TOD 添加 WebCamControl.GetInterfacceSafyOptions 实现 pdwSupportedOptions = 1; pdwEnabledOptions = 2; } public void SetInterfaceSafetyOptions(Int32 riid, Int32 dwOptionsSetMask, Int32 dwEnabledOptions) { // TOD 添加 WebCamControl.SetInterfaceSafetyOptions 实现 } #endregion

  重新编译,然后将IE里面的设置改回来。现在,我们发现,和JS的交互已经没有问题了。

  这样,一个最基本的ActiveX控件已经写好了。你可以在这个控件的基础上增加任何你需要的功能。到这里,编写控件的任务已经完成了,我们的下一个目标就是发布它。

关于用C#编写ActiveX控件3(转)相关推荐

  1. 用C#编写ActiveX控件(三) 转载

    在前面我们已经完成了ActiveX控件的开发,接下来的就是发布它了. 首先,我们建立一个windows安装项目,并将ActiveX控件的主输出添加到项目输出中.然后,改动ActiveX控件的主输出文件 ...

  2. 关于《用C#编写ActiveX控件》的几点说明

    在我的第一篇blog发表之后,得到大家的支持,我的工作得到了认可,感到很开心.当然,很多朋友也提出了很多出色的见地.我想在这里说明一下我对这些问题的理解.         我所完成的控件是一个用来获取 ...

  3. [转]用C#编写ActiveX控件(一)

    前些日子做一个Web项目,必须自己编写一个ActiveX控件.如今的ActiveX控件大多是使用VB/C++来开发的,而我对他们并不熟悉,因此考虑使用熟悉的C#编写ActiveX控件. 首先,建立一个 ...

  4. 关于用C#编写ActiveX控件4(转)

    在前面我们已经完成了ActiveX控件的开发,接下来的就是发布它了. 首先,我们建立一个windows安装项目,并将ActiveX控件的主输出添加到项目输出中.然后,改动ActiveX控件的主输出文件 ...

  5. 关于用C#编写ActiveX控件2(转)

        了解了上述相关的理论之后,我们来看一个用C#编写ActiveX的实例. 首先,建立一个WinForm控件项目HelloWorld,并拖入一个Label控件,文字设为HelloWorld,如图: ...

  6. ATL7 1编写ActiveX控件

    目录 ATL7.1编写ActiveX控件... 1 目录... 1 一创建ATL项目... 1 二创建ActiveX控件... 2 三解释向导的行为... 3 四标准属性... 4 背景属性... 4 ...

  7. 用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件

    用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件 用C#编写ActiveX控件 开发浏览器控件这是本控件开发完成后的一个简单应用.我们可以利用它以本地文件夹为单位来批量更新服务器 ...

  8. 用C#编写ActiveX控件(二)

    原文地址为: 用C#编写ActiveX控件(二) 用C#编写ActiveX控件(二)                             Homer 在我的上一篇blog中,已经实现了一个最基本的 ...

  9. 用C#编写ActiveX控件(二) 转载

    在我的上一篇blog中,已经实现了一个最基本的ActiveX控件.当然,我们编写的任务还没有完成.首先,我们先尝试实现和JS的交互能力.        我们在Demo中加入ShowMessage方法: ...

最新文章

  1. 福利丨机不可失!20G免费教材快来领!
  2. SWFTools pdf2swf 参数详解
  3. 在 sql server 中,查询 数据库的大小 和 数据库中各表的大小
  4. java扑克发牌程序_Java多线程实现扑克牌发牌程序实例
  5. jersey客户端_项目学生:带有Jersey的Web服务客户端
  6. 前端学习(2020)vue之电商管理系统电商系统之完成商品添加操作
  7. 北亚数据恢复关于服务器存储MDisk重建的数据恢复方法的研究
  8. 经典算法冒泡 和二分法
  9. 用Obsidian实现自动日记
  10. 第1142期AI100_机器学习日报(2017-11-03)
  11. NRF52840学习历程(十一)幻彩RGB灯之WS2812B
  12. 企业竞争竞争情报系统的流程整合
  13. 计算机科学是期刊核心2类,属于计算机技术类的北大核心期刊有哪些
  14. 接入物流快递单号自动识别查询接口API
  15. hihocoder 博弈三连发
  16. 【C++基础知识】常成员函数,常引用
  17. “我应为王”,比尔盖茨名言--author :邵京国
  18. 素数筛法详解:埃氏筛和欧拉筛
  19. v中国质子交换膜行业发展动态与供需前景预测报告2022-2027
  20. 关于:last-child的误解

热门文章

  1. 每日一道算法题 - KaprekarsConstant(hard-1)
  2. 3.9 限制root远程登录
  3. OLAP-Kylin-大数据Week13-DAY4-Kylin
  4. 关于视频监控线缆的常识
  5. 2017全球光伏增速或放缓 国内“6·30”仍将是分水岭
  6. python pathos_python运行多线程库pathos时,pymongo递归深度溢出
  7. 在线格式化js代码的网站
  8. Java 使用 Dom4j 解析 XML 指南
  9. fopen /open,read/write和fread/fwrite区别
  10. 查询服务器系统类型有哪些,查看服务器的操作系统类型