《深入解析ATL》學習手札 -- 第一天 (ATL #1) (轉)

worldblog發表於2008-01-05
《深入解析ATL》學習手札 -- 第一天 (ATL #1) (轉)[@more@]

  COM是操作的基本模型,從1993年建立以來,為Windows平臺的發展做出了不可磨滅的貢獻,而且自身還在不斷髮展。
  對於一個在Windows下開發應用軟體的員來說,學習COM有多麼重要,為了能夠深入的學習COM技術,特從書店買回一本潘愛民譯的《深入解釋ATL》一書,希望能在這本書的指引下,一步一步進入ATL開發COM的殿堂。


  今天是學習《深入解釋ATL》第一天,只看了一下譯序、原序、前言,就深受鼓舞,心裡暗暗下定決心,一定要學好ATL。


  先動手做個例子吧,照著書依樣畫瓢,建立了一個有一個屬性和一個方法的求PI的ATL元件,編譯,呀差個,NineDigitsOfPiStartingAt,自已寫吧,看看書後,網上有原始碼,拖一個下來,把相關程式碼拷到自已的程式中,大功告成,編譯透過。


  在VB中來試一下吧,在Project選單中的Component中把我的求PI元件加進來,用以下程式碼
Dim spi As
Dim str1 As String
Set spi = CreateObject("Pisvr.CalcPi")
spi.Digits = CInt(Text1.Text)
spi.CalcPi(str1)
MsgBox str1
怎麼spi.CalcPi(str1),請教了一下先學者,原來對於HRESULT CalcPi([out,retval]BSTR* pbstrPi);應該用str1 = spi.CalcPi來得到結果。在ATL中應該用*pbstrPi = SysAllocString(strbuf);來返回一段BSTR指向的空間,由的程式在使用後進行釋放。不過又有一個疑問,ATL可以執行在COM客戶的同一程式中,那麼分配的記憶體當然與客戶的記憶體在同一程式空間,SysAllocString分配的記憶體可以直接被客戶使用和釋放,但ATL可以與客戶在不同的程式空間呀,ATL的設計者會怎樣解決這些呢,現在剛開始,這樣的問題以後再思考吧。


  管理它呢,先編譯成Release版吧。怎麼,不行,換UNICODE,還是不行,怎麼辦呢。De都可以呀,問問高手吧。Oh my god!,ATL的BUG,氣死我了。在Project Setting的C/C++屬性頁的Preprocessor definitions選項中去掉最後一個,終於透過了。


  第一天,就到這裡吧。希望能在CSDN的鼓勵下好好學完這本書。



 


 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-996549/,如需轉載,請註明出處,否則將追究法律責任。

相關文章