用C#编写ActiveX控件(二)

news/2024/7/4 22:33:08 标签: c#, internet, ie, 任务, button, 互联网
iews" class="htmledit_views">

C#编写ActiveX控件(二)

                            Homer

 

       在我的上一篇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 onclick ='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 成员

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

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

红马天下 版权所有
博客:http://homer.cnblogs.com/
欢迎转载,但转载必须注明作者和出处。

 

http://www.niftyadmin.cn/n/1412378.html

相关文章

一些有意思的分布式论文

前言 因为时间原因&#xff0c;有些分布式论文在看到后没法立即阅读。因此将这些论文和里面有意思的点记录下来&#xff0c;等待日后实践过程中发现需要突破的点时重新阅读来找寻思路。 论文 No compromises: distributed transactions with consistency, availability, and …

【request_firmware】 linux内核下载模块固件接口【转】

转自&#xff1a;http://blog.csdn.net/magod/article/details/6049558 [-] 8 处理固件1481 内核固件接口 1482 它如何工作14.8. 处理固件 作为一个驱动作者, 你可能发现你面对一个设备必须在它能支持工作前下载固件到它里面. 硬件市场的许多地方的竞争是如此得强烈, 以至于甚至…

用C#编写ActiveX控件(三)

在前面我们已经完成了ActiveX控件的开发&#xff0c;接下来的就是发布它了。 首先&#xff0c;我们建立一个windows安装项目&#xff0c;并将ActiveX控件的主输出添加到项目输出中。然后&#xff0c;改动ActiveX控件的主输出文件&#xff0c;将其Register属性改为vsdrpCOM.如图…

[linux指令]SSH远程文件/目录传输命令scp

原文&#xff1a;http://www.vpser.net/manage/scp.html 1、获取远程服务器上的文件 scp -P 2222 rootwww.vpser.net:/root/lnmp0.4.tar.gz /home/lnmp0.4.tar.gz 上端口大写P 为参数&#xff0c;2222 表示更改SSH端口后的端口&#xff0c;如果没有更改SSH端口可以不用添加该参…

MIT6.824 lab3 KVRaft实验分析

本实验中&#xff0c;不同clientId的用户会向当前认为是leader的kvServer发送请求 集群中有多个kvServer&#xff0c;每个绑定了一个Raft 集群中的kvServer会不断执行指令更新自身状态&#xff0c;也因此在写代码时要对ops的来源进行区分 来源1&#xff1a;client认为当前kvS…

网络安全合规-数据安全治理的发展

数据安全治理的核心思想&#xff1a; 从某种意义上讲&#xff0c;要保证数据的绝对安全&#xff0c;就要将数据全部物理隔绝&#xff0c;变成“死”数据&#xff0c;这样是最“安全”的&#xff0c;既拿不走&#xff0c;也破坏不了。但这样做是否有意义&#xff1f;上面我们讲过…

洛谷P1993 小 K 的农场

题目描述 小 K 在 Minecraft 里面建立很多很多的农场&#xff0c;总共 n 个&#xff0c;以至于他自己都忘记了每个 农场中种植作物的具体数量了&#xff0c;他只记得一些含糊的信息&#xff08;共 m 个&#xff09;&#xff0c;以下列三种形式描 述&#xff1a; 农场 a 比农场 …

.Net用DataTable导出Excel通用函数

1,首先要导入Com文件Microsoft Excel 11.0 Object Library.2,要添加Interop.Excel.dll文件http://files.cnblogs.com/ghostljj/Interop.Excel.rar3.执行下面步骤 /// <summary> /// 导出Excel /// </summary> /// <param name"dt">要导…