您的位置:首页 > 编程语言 > C语言/C++

[转]C++基于ATL工程编写ActiveX控件

2012-02-14 09:38 232 查看
开发环境:VS2010

开发工程:C++ATL项目

开发目的:创建ActiveX实现js调用

步骤:

1. 创建一个ATL工程

应用程序类型选择动态链接库(DLL),勾选支持COM+1.0,勾选支持部件注册器

2. 选择类视图,添加接口与类



如果没有找到类视图,可以在工具栏中添加上视图



选择工程,右键添加类。选择ATL简单对象。

输入对象信息。



此处的ProgID需要注意,填写之后可在js中通过new ActiveXObject(“你的progID”)创建对象。



勾选支持中的3个选项,我选择的线程模型为单线程,可根据实际需求修改。完成后会发现已经生成了Add.h和Add.c文件。里面有一些红色波浪线提示错误无需管。

3. 依然是类视图中,找到对应的接口添加方法,比如我创建的简单对象名称为Add,这里我们就在IAdd节点上右键添加方法。

添加方法时,需要注意的是out和retval必须为指针类型,否则不让勾选,此处添加三个参数,其中result作为返回值(勾选了retval的参数)。



会发现你如果勾选了一个retval后,就不会再让你添加参数了,表示只能有一个返回值。仅仅勾选out的参数,js没有效果,C#等可以使用这种函数的out参数。

4. 找到Add.c文件,在添加完成的函数中实现具体方法。



5. 编译生成成功后,在工程目录(Debug或者release)下找到AddCom.dll.

使用regsvr32 AddCom.dll命令注册。提示注册成功后,编写一个html代码测试。

6. 两种方式创建对象。

1) 通过object标签创建对象

[html] view plaincopyprint?

<object classid="clsid:4738A542-7AEB-4CE4-86A7-71081B8CE8DA"id="myAddObj"

name="myAddObj " ></object>

[cpp] view plaincopyprint?

library AddComLib

{

importlib("stdole2.tlb");

[

uuid(64EC1270-5626-4FDF-888F-41859FB35E15)

]

coclassCompReg

{

[default]interface IComponentRegistrar;

};

[

uuid(FE912C18-0CFB-4DCA-99FA-6E4BC4B07594)

]

dispinterface_IAddEvents

{

properties:

methods:

};

[

uuid(4738A542-7AEB-4CE4-86A7-71081B8CE8DA)

]

coclass Add

{

[default]interface IAdd;

[default,source] dispinterface_IAddEvents;

};

};

library AddComLib

{

importlib("stdole2.tlb");

[

uuid(64EC1270-5626-4FDF-888F-41859FB35E15)

]

coclassCompReg

{

[default]interface IComponentRegistrar;

};

[

uuid(FE912C18-0CFB-4DCA-99FA-6E4BC4B07594)

]

dispinterface_IAddEvents

{

properties:

methods:

};

[

uuid(4738A542-7AEB-4CE4-86A7-71081B8CE8DA)

]

coclass Add

{

[default]interface IAdd;

[default,source] dispinterface_IAddEvents;

};

};


2) 通过new ActiveXObject创建对象

[javascript] view plaincopyprint?

var myAddObj = new ActiveXObject("myAddObj.1");

[javascript] view plaincopyprint?

var result = myAddObj.add(1,2);

alert(result);

var result = myAddObj.add(1,2);

alert(result);
8. 将ActiveX打包CAB待续.....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: