ATL 之ActiveX控件

1、ActiveX插件的制作

环境:vs2010,cert2spc.exe,makecert.exe,signtool.exe,signcode.exe,cabarc.exe

 

1.1:创建ATL Project

创建时只需要各项默认,点击finish

 ATL 之ActiveX控件

 

1.2:添加实现插件功能的类

右键项目——添加类——ATL——ALT控件,直接点击Add

 ATL 之ActiveX控件

 

1.3:填入参数

在Short name填入名字,点击Finish

 ATL 之ActiveX控件

 

1.4:切换类视图

右键Itest,点击add method。

在Method name填入方法名字,设置两个参数,都是LONG类型,输入变量名,点击Add。

 ATL 之ActiveX控件

 

完成两个参数的填入后,点击Finish。

 ATL 之ActiveX控件

 

1.5查看htm页面

将视图切换回解决方案视图,看到生成的test.htm。

 ATL 之ActiveX控件

 

 

 

1.6修改first.cpp

在STDMETHODIMP加入以下代码

LONG sum = num1 + num2;

 char szSum[64] = { 0 };

 sprintf(szSum,"%d + %d = %d",num1,num2,sum);

 ::MessageBoxA(NULL,szSum,NULL,NULL);

 return S_OK;

 

 ATL 之ActiveX控件

 

(在编译前请先关闭腾讯多客户线程)点击编译

效果:

 ATL 之ActiveX控件

 

 

 

2、打包成CAB文件

2.1、编写inf文件

classID修改成自己生成的CLASSID

在 [Add.Code]下

ActivexDemo.dll就是自己生成的dll,如有需要可再加其他dll(注意,在打包时请在inf中[Add.Code]下所有的dll一起打包)

 

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

 

 

[Add.Code]

ActivexDemo.dll=ActivexDemo.dll

 

 

[ActivexDemo.dll]

file-win32-x86=thiscab

clsid={7624F5CB-76CC-42FD-B81B-B49C5C0E3DE7}

FileVersion=1,0,0,1

RegisterServer=yes

DestDir=11 

2.2、创建cab文件

cabarc -s 6144 n ActiveXHello.cab ActiveXHello.inf ActiveXHello.dll

并且是cabarc.exe所在目录

而且必须在ActiveXHello.inf ActiveXHello.dll文件夹下执行

 

 ATL 之ActiveX控件

 

 

 

2.3、创建证书和私钥 

使用命令makecert.exe创建证书和私钥文件(先放入cert2spc.exe,makecert.exe,signtool.exe)

在当前文件夹下执行下面命令

makecert -sv "ActiveXHello.pvk" -n "CN=lhsoft.net" -r ActiveXHello.cer

 ATL 之ActiveX控件

 

 

 输入两次一样的密码;

 

 ATL 之ActiveX控件

 

3、为CAB进行签名

用signcode.exe进行签名

3.1、选择cab文件

 ATL 之ActiveX控件

 

 

 

3.2、选择自定义

 ATL 之ActiveX控件

 

3.3、选择cer证书

选择刚刚生成的cer证书

 

 ATL 之ActiveX控件

 

 

 

3.4、选择秘钥

默认选择磁盘上的私钥文件

 ATL 之ActiveX控件

 

 

 

 3.5、选择shal

 ATL 之ActiveX控件

 

 

3.6、填入数据描述

Windows,http://www.microsoft.com

 ATL 之ActiveX控件

 

 

3.7、时间戳服务器URL

填入免费的时间戳服务器URL http://timestamp.wosign.com/timestamp

 ATL 之ActiveX控件

 

 

 

4. 最后配置

4.1使用dll文件情况

只抽取项目的dll和htm文件,htm的修改如下:

<HTML>
<HEAD>
<TITLE>ATL 8.0 test page for object test</TITLE>
</HEAD>
<BODY>


<OBJECT ID="test" CLASSID="CLSID:0C5EBE01-3B3B-47C5-BD55-E1D47319D0D3"></OBJECT>
<input type="button" value="Add" onclick="al();" />
<script type="text/javascript">
function al() { 
var obj = document.getElementById("test");

            obj.add(2, 3);}
</script>

</BODY>
</HTML>

在客户机打开htm页面前,必须先在注册表注册,以管理员身份执行CMD

输入:regsvr32 -i “E:\TestActiveX\TestActiveX.dll”

 ATL 之ActiveX控件

 

 

4.2使用打包的CAB文件情况

只抽取项目的htm和自己打包的CAB文件,htm修改如下:

<HTML>
<HEAD>
<TITLE>ATL 8.0 test page for object test</TITLE>
</HEAD>
<BODY>


<OBJECT ID="test" CLASSID="CLSID:0C5EBE01-3B3B-47C5-BD55-E1D47319D0D3" CODEBASE=ActivexDemo.cab#FileVersion=1,0,0,1></OBJECT>
<input type="button" value="Add" onclick="al();" />
<script type="text/javascript">
function al() { 
var obj = document.getElementById("test");

            obj.add(2, 3);}
</script>

</BODY>
</HTML>

使用CAB文件则不需要在注册表注册,在打开htm页面,浏览器会询问你是否下载,选择是即可。

 ATL 之ActiveX控件

原文http://blog.csdn.net/liyong314159265/article/details/40979853