网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> VC编程 >> 文章正文
  使用.net framework 2.0用c#编写ActiveX控件(编写,部署,升级更新)            【字体:
使用.net framework 2.0用c#编写ActiveX控件(编写,部署,升级更新)
作者:佚名    文章来源:不详    点击数:    更新时间:2007-9-12    

如何使用C#在.net 2.0 framework下编写ActiveX的中文资料不多,而且被大家广为转载的中文资料还有错误(不知道是否是因为net 2.0和1.0有出入的关系)。
正在装载数据……
(转载一篇,我也还没试过)

本文包括了如何编写,部署,还有更新ActiveX控件

国内广为转载的那篇介绍如何使用C#的程序的文章的出处就是:
http://www.cnblogs.com/homer/archive/2005/04/01/86473.html(一共三篇)
还有一个中文的说明
http://www.dvpx.com/index_article_display.aspx?Fid=10&id=74
我也是从这一个文章作为起点的。可是这边文章在ActiveX包的发布一部分说的不是很全面。而且更加关键的是不知道是因为.net framework版本的原因还是因为作者的疏忽。里面关于一个Com口的声明有错误。

首先指出错误的地方:
在文章中IObjectSafety的声明如下
[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);        
    }
 

可是这样的声明并不能起到相应的作用。接口声明出错。正确的声明见如下网页
http://www.pinvoke.net/default.aspx/Interfaces/IObjectSafety.html


其次还有所一下关于CAB包部署方面的步骤

其中文章里面的
[hook1]
run= msiexec /i %EXTRACT_DIR%\ActiveXInstaller.msi /qn
这个就是在Cab包解压缩后自动运行的文件。

从网上查询来看,绝大部分的ActiveX Cab包的部署都是通过C++所写的Dll来作为示范的,而C#同C++写成的Dll还是有所区别的。
下面是一个我参考过的老外说的关于部署的例子
http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,df3f1be8-62bc-491c-935e-570ebfe53164.aspx

现在说说我的想法

我知道的部署方式有两种。
第一种比较麻烦,就是使用regasm命令来部署
比较熟悉部署C++的ActiveX的人都知道regsvr32是注册c++写的ActiveX包的命令。而regasm则是注册在.net Framework下编写的ActiveX的命令。具体的步骤就是在上面的Cab1中文
run= regasm/i %EXTRACT_DIR%\xxxx.dll /codebase  (xxxx.dll为打包进入的dll文件)
(方式和部署C++写的ActiveX的Dll差不多,只是把regsvr32命令替换成为regasm)


第二种也是比较好的(包括未来的更新)就是使用VS自带的安装程序进行安装
具体思路如下
在ActiveX的Solution中加入一个Setup Project工程,添加一个Project OutPut把ActiveX的工程加入该Project OutPut中。之后Register属性应该为True
这个时候就可以生成一个安装文件。
在打包CAB包中应该把Setup Project生成的打包装入msi文件打包放入Cab包中而且编写其inf文件
如何制作CAB包的连接
http://blog.joycode.com/felix/articles/32905.aspx
Cab包的格式
http://msdn.microsoft.com/library/default.asp?url=/workshop/delivery/download/overview/infarchitecture.asp?frame=true
这个是其中的例子,还是老外写的

接下来是更新。用C#写的ActiveX的问题在于注册后所看见的ActiveX版本号也正是.net Framework的版本号,而不是Dll文件的版本号。所以用原来的ActiveX更新方式有问题。不过可以正好利用Setup Project的更新方式。进行更新。

把Setup Project的RemovePreviousVersion属性设置为True这样。自动删除之前的版本。Setup Project是用一个GUID来标示是否是同一个SetUP Project。(注不是ActiveX的GUID)。所以在写了新的版本的时候。需要更新客户端的ActiveX可以使用如下步骤
1.改变ActiveX的GUID(不是Setup Project)的GUID。
2.提升Setup Project的版本号。
3.改变网页中的ActiveX的classid为新的ActiveX的ID

这个时候。当用户登陆网页时就会因为发现了新的ActiveX控件提示下载(GUID改变)。而下载后的安装程序使用Setup Project的GUID发现已经安装了旧版本。先卸载旧的安装版本。再卸载就安装版本的时候。已经自动地把久的ActiveX给注销了。


 


本文来源:http://blog.csdn.net/xiaoxiaohai123/archive/2007/08/28/1761497.aspx
站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     directx 图形接口指南(…
     win2k下的api函数的拦截
     用crypto  api  实现公钥…
     根据别人的md5源码封装的…
     vc中使用gdi+合并jpg图片
     document/view的交互 --…
     windows下的函数hook技术
     windows api函数大全一
     用vc 6.0实现串行通信的…
     vc++技术内幕(第四版)…
  • 快速、简便使用AJAX技术的三…

  • Sevrlet 中防止中文乱码策略

  • Ant入门-配置和使用     选…

  • ant使用简介

  • (JSP)在文本域中显示超链接n…

  • java现状----编程使用的语言…

  • Cookie又见Cookie-使用Html…

  • 一个关于Comparator的使用例…

  • genexus中对字符串的格式补空…

  • SIP简介,第2部分:SIP SERV…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David