Microsoft Excel是Microsoft為使用Windows和Apple Macintosh操作系統的電腦編寫的一款電子表格軟件。直觀的界面、出色的計算功能和圖表工具,再加上成功的市場營銷,使Excel成為最流行的個人計算機數據處理軟件。 ![]() 一、發展歷史 在 Basic 語言演變成 QBasic,然后到 Visual Basic 之前,VarPtr 函數就已經存在了。開始,這個函數存在于 VB 運行庫 1.0 版中。通過聲明可以調用這個函數: 數年之后,vbrun100.dll 變成了 msvbvm50.dll,但該函數的入口點卻還在那兒。為了獲取變量的地址,只須將變量名傳遞給該函數就行了。例如: 類似地,為了獲取字符串的指針,而非保存字符串的變量的指針,只須在變量名前加上 ByVal 即可。如: 在VB3之前,用這種方法來獲取字符串緩沖的指針是非常普遍的。但在VB4卻遇到了一點麻煩。 ANSI/UNIDCODE問題 這種差異是如何影響 VarPtr 函數的呢?當一個字符串傳遞給 VarPtr 函數時,函數執行后所返回的地址是保存臨時ANSI 字符串的臨時 ANSI 字符串 或變量的地址。換句話說,這個地址并不是你聲明的變量的真正地址。因此,對于字符串變量以及包括字符串的結構來講,這個函數一點用也沒有。 VB5來解決問題 為了能VarPtr能重新發揮作用,VB5 加入了三個針對 VBA 類型庫的入口點。這些入口點為 VarPtr 函數提供了內置的聲明。這三個函數的作用是: VarPtr:返回變量地址 StrPtr:返回真正的 UNICODE 字符串緩沖區的地址 ObjPtr:返回任何對象變量引用的地址 二、下面是這三個函數的具體用法: 1、StrPtr 該函數主要用來產生高效的 UNICODE API 調用。在 VB4,UNICODE 形式的 API 函數的調用必須借助于 Byte 數組,例如: 如果使用 StrPtr,上面的代碼精簡為: VarPtr/StrPtr/ObjPtr 的執行速度非常非常快,因此調用 UNICODE 函數所贊成有系統負擔實際上小于調用相對應的ANSI函數。因為前者不需進行轉換。 StrPtr 還能用于優化 ANSI API 函數的調用。在調用時使用 StrConv 和 StrPtr 就能避免將一個字符串變量多資傳遞給函數以及為每個調用而執行轉換操作所造成的系統負擔。例如原來的: 現在變為: StrPtr 還是唯一能直觀地告訴你空字符串和 null 字符串的不同的方法。對于 null 字符串(vbNullString),StrPtr 的返回值為 0,而對于空字符串,函數的返回值為非零。 2、VarPtr 該函數能與要求包含有UNICODE字符串的結構的API調用一起使用。如果將一個 MyUDTVariable 變量(一個自定義類型的變量)傳遞給一個由 ByRef UDTParam As MyUDT定義的參數,就會發生 ANSI/UNICODE 之間的轉換。但是,如果將 VarPtr(MyUDTVariable) 傳遞給由 ByVal UDTParam As Long 定義的參數,則不會發生這樣的轉換。 有一點需要特別注意,在VB中指針的算法非常重要。此外,你必須計算元素的大小,因為VB不會幫你完成這項工作。你還必須處理缺乏無符號長整型數據類型的問題。下面的函數實現了無符號算法 3、ObjPtr 該函數返回由對象變量引用的接口指針。由于大多數對象都支持多重接口,因此搞清楚地址對應的是對象的哪一個接口就非常重要了。通常個函數用來放在集合中的 對象。通過創建基于對象地址的關鍵字,你就可以在不需要啟遍歷整個集合中所有元素的情況下,輕松地將對象從集合中刪除。在許多情況下,對象地址是唯一可靠 的能作為關鍵字的東西,示例如下: Excel整體界面趨于平面化,顯得清新簡潔。流暢的動畫和平滑的過渡,帶來不同以往的使用體驗。 |
溫馨提示:喜歡本站的話,請收藏一下本站!