如何使用C++创建COM组件(ATL项目)

来源:互联网 发布:adobe dw软件序列号 编辑:程序博客网 时间:2024/05/16 17:33

基础

ActiveX和OLE的核心技术是com,但区别是OLE针对的是桌面上应用软件和文件之间的集成,而ActiveX则以网络应用与用户交互为主。com是独立于语言的组件体系结构,可以用C++、Java和VB等任意一种语言编写com对象。 

COM组件的优点有:

通过接口对功能分类;

功能扩充,只需添加接口就行;

可轻松实现进程间调用、分布式调用;

具有封装、继承、多态的面向对象特征。

借鉴文章:http://blog.csdn.net/tjulmy/article/details/2573097

新建工程


一路next直到finish,新的solution exporer界面如下所示:


添加一个新类

1.添加ATL Simple Object类;


2.填写类名和ProgID,一般ProgID可为工程名.类名(test.one),然后next.

3.next > next > finish.

新增三个文件.h,.cpp和.rgs。


编码实现功能

这里添加的类one就是一个接口,在.cpp中可以实现多个方法。

注意,不要忘记在test.idl文件中声明将要暴露出去的方法,one接口的clsid是:59CF380D-5F6C-44A0-BAC0-F81D1ADAE4CD。


[object,uuid(E2CC7541-888A-439B-BAA8-E144D91CE875),dual,nonextensible,pointer_default(unique)]interface Ione : IDispatch{[id(1), helpstring("方法SetParam")] HRESULT SetParam([in] LONG param1, [in] char param2);[id(2), helpstring("方法GetVersion")] HRESULT GetVersion([out,retval] BSTR* pVal);};[uuid(FC174988-A41D-4C99-99B4-E3083BA8ED6C),version(1.0),]library testLib{importlib("stdole2.tlb");[uuid(59CF380D-5F6C-44A0-BAC0-F81D1ADAE4CD)]coclass one{[default] interface Ione;};};
如果有很多功能,为便于管理,可把所有实现功能的方法分类,一个接口管理一类方法。

调用演示

准备工作:

1.把test.dll文件放在system32(64位系统:SysWOW64)下;

2.通过命令行注册该dll文件:regsvr32 test.dll;

3.编辑测试页面。

<html><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"><TITLE>测试页</TITLE></head><body><OBJECT ID="example"  height="1" width="1" CLASSID="CLSID:"59CF380D-5F6C-44A0-BAC0-F81D1ADAE4CD"></OBJECT><script>    function Info() {    tb_result.value = "方法setparam:" + example.SetParam(9, "a") + "\r\n" + "\r\n";           tb_result.value = tb_result.value + "方法getversion:" + example.GerVersion() + "\r\n" + "\r\n";   }    </script><input type="button" value="测试" onclick='Info()'/><br /><textarea name="tb_result" rows="1" cols="20" id="tb_result"style="height:70%;width:70%;"></textarea><br /></body></html>





0 0
原创粉丝点击