基于ATL开发ActiveX控件(第一节,简单的Hello world)

 一、开发环境

     XP、Visual Studio2010。

 

 

 二、 开发第一个ActiveX控件

      第一步:创建工程

      运行Visual Studio2010,我用C++语言开发,我们创建一个工程:“文件--新建--项目”,在已安装的模板中选择“Visual C++——ATL”,然后选择右边的“ATL项目”,项目名称“HeloWorldATL”,点击确定,然后一直下一步选择默认的配置就可以,工程就创建好了。见下图



 

      第二步:添加一个ATL控件类

      右键工程名称“HeloWorldATL”,选择“添加--类”,选择“ATL控件”,在简称处填写“Test”,点击完成。

 

      第三步:添加一个方法

      切换到类视图(在左下角解决方案旁边),找到ITest接口,右键“添加--方法”,方法名:“test1”,点击完成。

 

      第四步:编写方法代码

      切换到解决方案视图,然后展开“源代码”,打开Test.cpp,找到方法:

Cpp代码
  1. STDMETHODIMP CTest::test1(void)   
  2. {   
  3.     // TODO: 在此添加实现代码   
  4.   
  5.     return S_OK;   
  6. }  
STDMETHODIMP CTest::test1(void)
{
	// TODO: 在此添加实现代码

	return S_OK;
}

 

      修改方法,我做了一个简单的实现,将“hello”输出到本地硬盘上:

Cpp代码
  1. STDMETHODIMP CTest::test1(void)   
  2. {   
  3.   
  4.     ofstream out("C://log1.txt");   
  5.   
  6.     out << "hello";   
  7.   
  8.     out.close();   
  9.   
  10.     return S_OK;   
  11. }  
STDMETHODIMP CTest::test1(void)
{

	ofstream out("C://log1.txt");

	out << "hello";

	out.close();

	return S_OK;
}

      记得引入ofstream:

Cpp代码
  1. #include <fstream>   
  2.   
  3. using namespace std;  
#include <fstream>

using namespace std;

      

 

     第五步:编译生成控件

     右键项目名称,选择“生成”,输入控制台显示:

Cpp代码
  1. 生成成功。   
  2.   
  3. 已用时间 00:00:24.29   
  4. ========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========  
生成成功。

已用时间 00:00:24.29
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========

      此刻我们找控件生成的位置,首先找到工程所在目录,默认是在我的文档下的Visual Studio 2010,然后进入工程文件夹,进入HeloWorldATL/Debug,其中HeloWorldATL.dll就是我们编译后生成的控件。

      我的完整路径供大家参考:

Cpp代码
  1. C:/Documents and Settings/XPMUser/My Documents/Visual Studio 2010/Projects/HeloWorldATL/Debug  
C:/Documents and Settings/XPMUser/My Documents/Visual Studio 2010/Projects/HeloWorldATL/Debug

       

 三、测试ActiveX控件

        首先介绍一下CLASSID, 大家会有疑问,测试控件和CLASSID有什么关系呢?这和ActiveX控件调用的机制有关,在html文件中,ActiveX控件是通过<object>标签声明并调用的,<object>标签中有三个重要的属性,第一个是id,通过id我们可以用js引入控件对象;第二个是codebase,用来指定控件的安装源,这个我们先不做介绍;第三个就是CLASSID,用来查找注册表中控件,CLASSID又叫全球唯一标识,也就是说我们每次创建的控件工程所产生的CLASSID都不会重复,原理大概是这样的:取网卡的Mac地址然后拼接上一些随机数等规则,因为网卡的Mac地址也是全球唯一的,所以生生的CLASSID也不会重复。那么我们怎么找到控件的CLASSID呢?细心的观察我们可以发现,但我们对工程进行生成操作后,在工程下多了一个htm文件,我的叫Test.html,这个文件的命名规则是取我们控件类的名称,大概这个文件我们看其中关键的内容:

Html代码
  1. <OBJECT ID="Test"  CLASSID="CLSID:D55ED53A-0452-4D3D-B821-23D8B5E984D8"></OBJECT>  
<OBJECT ID="Test"  CLASSID="CLSID:D55ED53A-0452-4D3D-B821-23D8B5E984D8"></OBJECT>

 

没错,我的CLASSID就是“D55ED53A-0452-4D3D-B821-23D8B5E984D8”,这个htm就是用来测试我们的控件的,光有一个<object>标记还不够,我们还要添加一些测试代码,如下: 

Html代码
  1. <script type="text/javascript">  
  2.     Test.test1();   
  3. </script>  
<script type="text/javascript">
    Test.test1();
</script>

 

然后我们运行一下这个htm,看看最终的效果。

第一节,简单的Hello world!

 

在本节中只是做了一个最简单的ActiveX控件,并没有涉及到传参和返回值,后续我会讲怎么传参怎么接收返回值,敬请期待!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值