2011.03.02
本文將介紹使用vc2008中的atl開發乙個用於網路部署的cab控制項包的過程。
開啟vs2008,建立乙個atl專案,如下圖:
考慮到簡介性,選擇了"allow merging of proxy/stub code"
(建議先編譯一下真個project,保證編譯成功並順利註冊了控制項)
之後新增乙個atl的控制項,注意正確的物件型別。
右鍵選擇專案「add」->"add class"
一定要注意選擇「atl控制項」,否則事件支援等可能會相對麻煩些,需要自己手動寫些介面**。選擇add後填寫必要的控制項名稱等,進入選項介面:
這裡需要注意:如果控制項會返回給js/vbs指令碼一些訊息事件的話,必須選擇「connection points」新增連線點支援。否則需要自己手動在idl中新增連線點介面定義等資訊;另外注意"control type:"的選擇,如果是執行時不可見控制項或者簡單的功能控制項等,如果需要返回給js/vbs一些訊息事件的話,必須實現iprovideclassinfo2和iprovideclassinfo,此時最好選擇standard control並在後面選擇實現,否則的話可以使用minimal control。
"next>"出現需要實現的介面對話方塊,可以根據需要選擇,如果返回指令碼事件的,至少要實現iprovideclassinfo2介面,如下:
至此,乙個atl控制項就建立完成了。建議編譯下專案,保證鏈結成功並正確註冊控制項。
在「class view」中新增控制項支援的屬性和方法。
例如:具體可以根據需要操作,這裡不詳述細節。建議編譯下保證正確性。
新增事件函式的方法類似於為控制項新增函式,不過針對的介面為***lib下的_i***event,如下:
如果出現html網頁中事件響應不成功,必須保證上面提到一些設定正確,可以手動檢查下必要的介面是否實現。
這之後就可以在實現類c***x上新增connection point來方便控制項內向外傳送事件了。具體如下圖:
注意:需要一定不要錯誤選擇"implement inte***ce"並實現事件介面;
之後控制項實現類中就可以呼叫fire_***來傳送事件呼叫了。
至此,控制項就正確實現了,可以使用專案自動產生的.htm檔案測試控制項的各個介面是否正常工作。
另外:所有的fire_***函式只能在視窗執行緒中執行,控制項視窗未初始化時似乎呼叫無效,例如finalconstruct和finalrelease等函式中。
如果要實現控制項可以自註冊必須在資源檔案中新增
block "040904e4"
begin
value "oleselfregister", "/0"
end如果要標記控制項的安全性,需要再控制項實現檔案中新增父類
class atl_no_vtable c****** :
public iobjectsafetyimpl,
在begin_com_map(c***xx)部分插入實現:
begin_com_map(c***xx)
com_inte***ce_entry_iid(iid_iobjectsafety, iobjectsafety)
end_com_map()
cab包需要乙個.inf說明包的資訊,乙個示例如下:
把這個包和相關的控制項及其它檔案等放到乙個目錄下,在命令列下使用makecab命令進行打包,之前需要準備乙個.ddf檔案說明需要哪些檔案打包
之後呼叫makecab /f ***.ddf,即可獲得乙個用於發布的cab檔案。
使用方法為設定codebae="[#version=1.0.0.1]"
由於atl的框架,極大地方便了控制項的程式設計,但需要熟悉基本的com理論,並注意框架中新增**的步驟,否則很容易出現莫名的錯誤。
VC2008中Vector的erase使用
先看下面 include stdafx.h include include using namespace std int tmain int argc,tchar argv vector iterator iter ivec.begin enditer ivec.end while iter en...
vc2008開發的程式的發布方式
vc2008開發的程式的發布方式可以有5種方式 1 採用靜態鏈結到crt和mfc.只要你擁有組成程式的所有源 你就可以採用這種方式,這種方式除了程式變大一點,好處多多 1 不必重新發布vc2008基礎庫vcredist x86.exe 安裝到winsxs 2 不必產生,嵌入manifest.3 也不...
VC 2008中使用自帶水晶報表和打包
一 新建乙個基於對話方塊 mfc的應用程式工程,然後向對話方塊中插入控制項 crystal activexreport viewer control 10.5 向工程中新增 crystalreportviewer10.h crystalreportviewer10.cpp crvtrackcurso...