语音播报
上面说了ActiveX的原理,其实想实现一个这个东西,手段很多 。C++,VC,VB,Delphi......,但我们应该与时俱进,哈哈,用C#来玩一把吧。
首先,我们创建项目。
此处注意,因为我是用的Visual Stdio 2010 ,可能与其它版本的vs会有一些位置和翻译的差异,但是大体一样。此外,考虑到framework2.0现在比较普及,而且安装包也很小,所以开发的目标环境定位在framework2.0上面 。而如果看官们不在乎,完全可以在3.0,3.5,4.0上做类似的工作。
我们选择创建一个“Windows 窗体控件库”,创建成功后,在项目上右键->属性->应用程序,调整framework版本和输出类型
注意,输出类型一定要是“类库”,而在“程序集信息”里面
一定要勾选上“使程序集COM可见” 。
在“生成”设置里面一定要将“为COM互操作注册”勾选上。这里一定要注意,在debug里面改掉后,在release里面还需要再改一遍,否则你更改编译配置时候,容易疏漏这一点 。
然后打开AssemblyInfo.cs,在其中
增加[assembly: AllowPartiallyTrustedCallers()]
修改[assembly: ComVisible(true)]
注释[assembly: Guid("xxx")],xxx这里会不同,但是请记住这个guid,一会有用
然后创建一个接口文件IObjectSafety.cs 。内容如下:
using System;
using System.Runtime.InteropServices;
namespace CSI.ActiveX.Zip
{
/// <summary>
/// 把控件发布成com组件时必须实现的接口.该接口的GUID是固定的,不能修改,否则组件发布不成功
/// </summary>
[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
// 方法定义
void GetInterfacceSafyOptions(System.Int32 riid, out System.Int32 pdwSupportedOptions, out System.Int32 pdwEnabledOptions);
void SetInterfaceSafetyOptions(System.Int32 riid, System.Int32 dwOptionsSetMask, System.Int32 dwEnabledOptions);
}
}
再开始创建核心的用户控件,新建一个用户控件:
下面开始对我们的核心控件进行逻辑编程:
首先,增加using System.Runtime.InteropServices;
其次,继承刚才创建的IObjectSafety接口,同时使用Guid属性标识
[Guid("2865d2a6-9bce-4522-9f39-eddb2887375d")]
public partial class QRCode : UserControl, IObjectSafety
此处的Guid即可通过
工具->创建GUID的方式来创建
也可以直接使用刚才我们在AssemblyInfo.cs中注释的那个Guid。
然后我们开始实现IObjectSafety的接口内容
#region IObjectSafety 成员
public void GetInterfacceSafyOptions(System.Int32 riid, out System.Int32 pdwSupportedOptions, out System.Int32 pdwEnabledOptions) {
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
return;
}
public void SetInterfaceSafetyOptions(System.Int32 riid, System.Int32 dwOptionsSetMask, System.Int32 dwEnabledOptions)
{
return;
}
#endregion
再加上一堆[email protected]#¥%……&×()—+的愉快编程,我们的核心控件功能实现了! OK,再编译一把,生成出来了一个Dll,一个tlb,自此开发部分就妥当了
。