VC.NET实现自动化组件

来源:互联网 发布:安徽seo 编辑:程序博客网 时间:2024/06/03 02:27

1:建立一个解决方案

2:建立一个 MFC DLL 项目,项目名称为“Simple7”

3:一定要选择附加功能中的“自动化”,切记!切记!

4:添加新类

5:在新建类中支持自动化

类名 你随便写个类名子啦

基类 一定要从 CComTarget 派生呀,只有它才提供了 IDispatch 的支持

自动化 - 无 表示不支持自动化,你要选择了它,那就白干啦

自动化 - 自动化 支持自动化,但不能被直接实例化。后面在讲解多个 IDispatch 的时候就用到它了,现在先不要着急。

自动化 - 可按类型ID创建 一定要选择这个项目,这样我们在后面的调用中,VB就能够CreateObject(),VC就能够CreateDispatch()对组件对象实例化了。注意一点,这个 ID 其实就是组件的 ProgID 啦。

6:选择接口,添加函数

7:添加函数。我们要写一个整数加法函数Add()。

8:好了,下面开始输入程序代码:

01.LONGCDispSimple::Add(LONGn1, LONG n2)
02.{
03.AFX_MANAGE_STATE(AfxGetStaticModuleState());
04.
05.returnn1 + n2;
06.}

10:编译注册

如果上面的操作由于疏忽而发生了错误,那么你可以手工进行改正。

其一、你可以打开 IDL 文件进行修改,修改时要特别小心函数的声明中,有一个[id(n)] 的函数序号,可不要乱了;

其二、同步修改 H/CPP 中的函数声明和函数体;

其三、在CPP文件中,根据情况也要修改 BEGIN_DISPATCH_MAP/END_DISPATCH_MAP()函数影射宏。

正确编译后,vc.net 2003 比 vc6.0 要聪明多了,它会自动注册组件。如果复制到其它计算机上,你也需要手工执行 regsvr32.exe 进行注册。

11:如果建立的不是DLL程序,而是EXE,那么在最后的注册步骤上有所区别。

DLL程序:在编译结束之后,会自动注册,com接口也就可以被调用了;

EXE程序:编译结束之后,会生成一个.reg文件,需要用户自己去安装com接口,否则是无法调用的。

打开看看里面的内容,无非是注册了应用名称对应的键值,不然的话win32com.client.Dispatch()函数无法找到注册的程序接口。

处理步骤如下:

1)磁盘上建立tmp.reg文件,将Exe2.reg中的内容粘贴过去,保存、运行,将内容写到注册表中;

2)将Exe2.exe所在目录加入到PATH环境变量中。原因:该注册表不是在VS内部自动注册的,所以不会在注册的时候自动加入当前工程路径。否则即使接口注册成功了,也会因为找不到exe文件而导致com接口调度失败。