VC6下使用WebLink控件
? 這是今年6月7號我的一篇日志,好像還有些參考價值,謄到blog上來吧。
? 最終我在VC6下面搞定了WebLink,與以往一樣,論壇和MSDN是我最大的幫手。在ESRI官方論壇那可憐的四五個關于VC6+WebLink的帖子中,我找到了困擾我多天的問題的答案。
? 在做現在這個影像數據服務項目的整個過程中,我一共在三個平臺下面使用過WebLink控件,從VB6到.net,再回到VC6,所謂由儉入奢易,由奢入儉難,這次真的是體會到了。WebLink響應函數OnRequest的兩個參數arguments和values分別是http請求字符串中的鍵名集合與鍵值集合,都是MoStrings類型的,但在VB6和.net中,它們都是以object示人,使用它們就像使用MoStrings一樣。
? 然而到了VC6中,情況變了,VC無情的撕掉了object的外衣,赤裸裸的將COM的LPDISPATCH露給了我。本人看過一點《COM本質論》,對IUnkown、IDispatch等心存恐懼,因此看到這兩個IDispatch *類型的參數arguments和values感到無從下手。
? 在MSDN和CSDN上苦苦尋覓之后,我發現應該使用arguments->GetIDsOfNames和arguments->Invoke來調用arguments的屬性和方法。實驗中也確實通過這種方法獲得了Count屬性的值。至此我以為問題解決了,但后面卻發現,暫且不說GetIDsOfNames和Invoke那冗長得要分成若干行才能寫完的參數(而且還不能全搞明白它們的含義),就是想調用arguments的一個Find方法,就復雜得讓人吐血,如果再想使用運算符,比如[ ]索引,那就更恐怖了。本人技術拙劣,也不知道是不是COM組件在VC6下面都是這種用法。
? 于是思路就此中斷,這次CSDN也沒能再顯神威。但ESRI的論壇上還是有點蛛絲馬跡的,都是些上個世紀的帖子,其中就有我遇到的這個問題,solution如下:
? 通過添加MO而使MoStrings可用,而MoStrings中就有以LPDISPATCH為參數的構造函數。這樣LPDISPATCH類型的arguments和values就可以順理成章的轉成MoStrings了,然后就可以像正常情況一樣直接使用其一切屬性和方法了。至此,才算是真正解決了這個問題。
??? COM雖已是過氣的技術了,但它仍很重要,技術的發展都是循序漸進的。Don Box在《Essential .NET》中第一章就說“CLR is a better COM”,一針見血。
轉載于:https://www.cnblogs.com/rib06/archive/2005/11/16/277309.html
總結
以上是生活随笔為你收集整理的VC6下使用WebLink控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qcom平台添加 Camera 驱动(m
- 下一篇: MVC3 上传文件