C++实现ActiveX插件(ATL)

 

文章属于原创,转载请联系本人。有参照两个博客(http://blog.csdn.net/jiangtongcn/article/details/13509633 http://blog.csdn.net/liyong314159265/article/details/40979853)

vs2010,cert2spc.exe,makecert.exe,signtool.exe,signcode.exe

1、ActiveX插件的制作

环境:vs2010cert2spc.exemakecert.exesigntool.exesigncode.exe,cabarc.exe

 

1.1:创建ATL Project

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

 

 

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

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

 

 

1.3:填入参数

在Short name填入名字,点击Finish

 

 

1.4:切换类视图

右键Itest点击add method

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

 

 

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

 

 

1.5查看htm页面

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

 

 

 

 

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;

 

 

 

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

效果:

 

 

 

 

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文件夹下执行

 

 

 

 

 

2.3、创建证书和私钥 

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

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

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

 

 

 

 输入两次一样的密码;

 

 

 

3、CAB进行签名

signcode.exe进行签名

3.1、选择cab文件

 

 

 

 

3.2选择自定义

 

 

3.3选择cer证书

选择刚刚生成的cer证书

 

 

 

 

 

3.4选择秘钥

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

 

 

 

 

 3.5选择shal

 

 

 

3.6填入数据描述

Windowshttp://www.microsoft.com

 

 

 

3.7时间戳服务器URL

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

 

 

 

 

4. 最后配置

4.1使用dll文件情况

只抽取项目的dllhtm文件,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

 

 

 

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页面,浏览器会询问你是否下载,选择是即可。

 

 

 

 如果大家想用C#实现可以看  http://www.cnblogs.com/huangd/p/8058338.html

这样大家就可以装B啦!!!!!!

 

posted @ 2017-12-11 10:31  爱喝凉白开  阅读(3042)  评论(0编辑  收藏  举报