• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c#创建activex(vs2008)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

第一步:新建一个解决方案 demoSolution,添加一个Windows控件库项目,我们起名为demoActiveX。为便于阅读,我们更改控件名字为demoControl.cs,然后拖动一个textBox控件到窗体上。

第二步:在demoControl类下新建公共方法Test,用于实现控件与客户端脚本的互操作,

       public void Test()
        {
            MessageBox.Show("你输入的内容为:" + this.textBox1.Text);
        }

第三步:打开AssemblyInfo.cs修改程序集信息。引用System.Security命名空间,并添加[assembly : AllowPartiallyTrustedCallers()]安全声明,修改[assembly: ComVisible(false)]为[assembly: ComVisible(true)]使程序集Com可见。

第四步:为Com Interop注册。右键demoActiveX项目属性,在“生成”选项卡里将“为Com Interop注册”打上勾即可。

第五步:在demoActiveX中添加命名空间System.Runtime.InteropServices,使用工具->创建 Guid工具创建一个新的Guid{E5FD041B-8250-4cbc-B662-A73FC7988FB5},用该Guid初始化demoActiveX,该Guid即是我们要在Web页面下引用该ActiveX的classid 。

第六步:实现IObjectSafety接口,把ActiveX控件标记为安全的。

[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);
    }

public void GetInterfacceSafyOptions(Int32 riid, out Int32 pdwSupportedOptions, out Int32 pdwEnabledOptions)
        {
            // TODO: 添加 demoControl.GetInterfacceSafyOptions 实现
            pdwSupportedOptions = 1;
            pdwEnabledOptions = 2;
        }

        public void SetInterfaceSafetyOptions(Int32 riid, Int32 dwOptionsSetMask, Int32 dwEnabledOptions)
        {
            // TODO: 添加 demoControl.SetInterfaceSafetyOptions 实现            
        }

第七步:发布。添加新Windows安装项目 winsetup   添加项目主输出,然后,改动ActiveX控件的主输出文件,将其Register属性改为vsdrpCOM,很遗憾的是,安装URL中必须使用绝对路径,不能使用相对路径。这意味着生成安装程序的时候就必须确定路径,不是很方便。在示例中,我使用了在发布中需要改为实际的域名。 然后生成安装程序,并把setup.exe及winsetup.msi拷贝到虚拟目录demoActiveX下。/

第八步:测试。编写一个htm页面以供测试,需要注意一点,我们在object块中加入了codebase属性代码,用于指定下载控件的位置。参考下面代码文件。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace demoActiveX
{
    [Guid("E5FD041B-8250-4cbc-B662-A73FC7988FB5")]
    public partial class demoControl : UserControl, IObjectSafety
    {
        public demoControl()
        {
            InitializeComponent();
        }

        public void Test()
        {
            MessageBox.Show("你输入的内容为:" + this.textBox1.Text);
        }

        public void GetInterfacceSafyOptions(Int32 riid, out Int32 pdwSupportedOptions, out Int32 pdwEnabledOptions)
        {
            // TODO: 添加 demoControl.GetInterfacceSafyOptions 实现
            pdwSupportedOptions = 1;
            pdwEnabledOptions = 2;
        }

        public void SetInterfaceSafetyOptions(Int32 riid, Int32 dwOptionsSetMask, Int32 dwEnabledOptions)
        {
            // TODO: 添加 demoControl.SetInterfaceSafetyOptions 实现            
        }

    [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);
    }

<html xmlns="" >
<head>
    <title>Untitled Page</title>
</head>
<body>
<form >
       <table>
   <tr>
    <td align="center">
     <object
      class></table>

<script>
function doTest()
{
   var obj = document.getElementById("demoActiveX");
   obj.Test();
}
</script>
</form>
    </body>
</html>

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#多线程3种创建Thread、Delegate.BeginInvoke、线程池发布时间:2022-07-13
下一篇:
c#表格中显示access中的时间字段时不显示秒发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap