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啦!!!!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM