首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 创造ActiveX

2012-12-20 
C# 创建ActiveX第一步:创建一个window窗体控件库。设置程序集信息,打开vs2010 GUID生成器生成GUID:!--Star

C# 创建ActiveX

第一步:创建一个window窗体控件库。设置程序集信息,打开vs2010 GUID生成器生成GUID:

<!--StartFragment -->

?C# 创造ActiveX勾选为com互操作注册,最好在debug和release下面都勾选(注意,此处如果是在debug状态下修改的,那在调到release状态下还需要再设置一次:<!--StartFragment -->C# 创造ActiveX打开AssemblyInfo.cs文件,添加:
using?System.Reflection;using?System.Runtime.CompilerServices;using?System.Runtime.InteropServices;using?System.Security;//自己添加?using?System; //?有关程序集的常规信息通过以下//?特性集控制。更改这些特性值可修改//?与程序集关联的信息。[assembly:?AssemblyTitle("LoginActiveX.Controls")][assembly:?AssemblyDescription("")][assembly:?AssemblyConfiguration("")][assembly:?AssemblyCompany("Orifound")][assembly:?AssemblyProduct("LoginActiveX.Controls")][assembly:?AssemblyCopyright("Copyright???Orifound?2011")][assembly:?AssemblyTrademark("")][assembly:?AssemblyCulture("")] //自己添加?[assembly:?AllowPartiallyTrustedCallers()]  //?将?ComVisible?设置为?false?使此程序集中的类型//?对?COM?组件不可见。如果需要从?COM?访问此程序集中的类型,//?则将该类型上的?ComVisible?特性设置为?true。[assembly:?ComVisible(true)]  //注意: 此属性设置为true //?如果此项目向?COM?公开,则下列?GUID?用于类型库的?ID[assembly:?Guid("4498e10b-8c59-4eec-bd0a-139fe2c7e65b")]//注意:为刚刚生成的Guid //?程序集的版本信息由下面四个值组成:////??????主版本//??????次版本?//??????内部版本号//??????修订号////?可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,//?方法是按如下所示使用“*”://?[assembly:?AssemblyVe?
第二步,添加自己的控件了,添加一个用户控件,打开GUID生成器为控件生成GUID:
[Guid("F51A8749-E7A7-4F76-A82A-7D860C788663")]public?partial?class?LoginContorl?:?UserControl
?其次,为了让ActiveX控件获得客户端的信任,控件类还需要实现一个名为“IObjectSafety”的接口,要创建该接口(注意,不能修改该接口的GUID值),IObjectSafety代码如下(注意,不能修改该接口的GUID值:主句话没弄明白,我每次都是自己生成的):
[ComImport,?Guid("33F072D8-BFD7-4E80-B667-B63BFF64BE57")][InterfaceType(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; 修改控件类,使之继承IObjectSafety接口,代码清单如下:<!--StartFragment -->?C# 创造ActiveX
    [Guid("F51A8749-E7A7-4F76-A82A-7D860C788663")]????public?partial?class?LoginContorl?:?UserControl,?IObjectSafety????{????????public?LoginContorl()????????{????????????InitializeComponent();????????} ????????#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 ????????private?void?btOk_Click(object?sender,?EventArgs?e)????????{????????????MessageBox.Show("用户名:?"?+?tbUserName.Text.Trim()?+"??密码:?"?+?tbPWD.Text.Trim());????????}????}??????????????
到此为止控件开发完成。第三步,打包发布。我们使用IExpress打包成CAB文件,下面提供中文版下载。编写INF文件,对于INF文件这里不做介绍,因为本人对这些东西没做深入研究,关于这方面的文章应该很多。
;LoginActiveX.dll?的?INF?文件;DestDir?可以为?10?则在?Windows?目录,为?11?则在?Windows\System(32)?目录,或为空则在?Occache?目录。 [version]signature="$CHICAGO$"AdvancedINF=2.0 [DefaultInstall]CopyFiles=install.filesRegisterOCXs=RegisterFilesAddReg=AddToRegistry [RInstallApplicationFiles]CopyFiles=install.filesRegisterOCXs=RegisterFilesAddReg=AddToRegistry [DestinationDirs]install.files=11 [SourceDisksNames]1=%DiskName%,LoginActiveX.CAB,1 [Add.Code]LoginActiveX.dll=LoginActiveX.dll [install.files]LoginActiveX.dll=LoginActiveX.dll [SourceDisksFiles]LoginActiveX.dll=1 [LoginActiveX]file-win32-x86=thiscabRegisterServer=yesclsid={F51A8749-E7A7-4F76-A82A-7D860C788663}DestDir=11?FileVersion=1,0,0,0 [Setup?Hooks]AddToRegHook=AddToRegHook [AddToRegHook]InfSection=DefaultInstall2 [DefaultInstall2]AddReg=AddToRegistry [AddToRegistry]HKLM,"SOFTWARE\Classes\CLSID\{F51A8749-E7A7-4F76-A82A-7D860C788663}\Implemented?Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}"HKCR,"Licenses",,,"Licensing:?Copying?the?keys?may?be?a?violation?of?established?copyrights." [RegisterFiles]%11%\LoginActiveX.dll
找到编译生成的dll文件,此时打包需要两个文件(如果有其他DLL依赖文件也需写入INF文件):<!--StartFragment -->C# 创造ActiveX运行IExpress选择【创建新的自解压向导文件】-【仅创建压缩文件(ActiveX Installs)】-【将上图两个文件添加进去】-【选择生成文件的保存路径】-【点击下一步完成操作】第四步,使用制作好的ActiveX找到控件的GUID
[Guid("F51A8749-E7A7-4F76-A82A-7D860C788663")]public?partial?class?LoginContorl?:?UserControl,?IObjectSafety
编写HTML代码:
<object?id="myLib"?classid="clsid:F51A8749-E7A7-4F76-A82A-7D860C788663"?codebase="Login.CAB"?width="600"?height="200"></object>
classid即为控件的Guid,codebase为CAB文件的路径。运行HTML文件即可。至于ActiveX与javascript之间的交互和ActiveX的签名将在另一篇里面将。

热点排行