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插件的制作
环境:vs2010,cert2spc.exe,makecert.exe,signtool.exe,signcode.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.exe,makecert.exe,signtool.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、填入数据描述
Windows,http://www.microsoft.com
3.7、时间戳服务器URL
填入免费的时间戳服务器URL http://timestamp.wosign.com/timestamp
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”
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啦!!!!!!