VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

驕傲公主之MyStruct 1.0 正式發佈(轉貼)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
goto-dream



註冊時間: 2004-05-11
文章: 909


第 1 樓

發表發表於: 星期五 六月 11, 2004 1:34 pm    文章主題: 驕傲公主之MyStruct 1.0 正式發佈(轉貼) 引言回覆

MyStruct 1.0 正式發佈
http://mihu.agi-china.com/sdss/dispbbs.asp?boardID=2&ID=3349&page=1


前言:
結構,在 Windows 系統得到廣泛應用。在 API 中充當著舉足輕重的角色,它幾乎無處不在,在 Windows 95 裡己公開的結構就有 400 多個。但是在 Vfp 中卻沒有結構這種數據類型(更鬱悶),我們不得不使用一片連續的內存地址來模防它,取值賦值需要進行轉換,而且這要求很精觸的計算確保不會取錯成員的值。而我計厭這種計算,我沒有那麼多耐心一個字節一個字節地計算某某成員你到底在哪呀,我更討厭進行數據轉換。我呼喚 Vfp 開始小組在 Vfp 新版本裡支持結構類型,但在他們聽到我的呼喚之前,我仍然需要利用我現在使用的 Vfp 的版本來讀取結構,於是 MyStruct 的構想被提了出來。它提供了一種相對較為簡單讀寫結構的方法,它在聲明與讀寫的使用上己經非常地接近 C++ 。你們可以比較原始 C++ 結構與 MyStruct 中對結構的聲明,除了語法不一樣處,其他是一模一樣的。隨著 MyStruct.Vcx 同時奉上的,是附帶 16 個示例的示例表單。它不能說明什麼,它盡量演示它所知的不同 API 結構類型,從結構定義,結構讀寫以及單一結構、結構數組、結構指針、結構中的結構~~~~

MyStruct 1.0 有何新功能?
1.擴展數據類型,僅是為了方便定義結構與 C++ 結構聲明一致。
2.當 API 返回值是多個結構時,支持自動移動指針逐一讀取結構,如 GetItem("Left", 2)。

如何更新?它影響舊版的使用嗎?
覆蓋原文件即可,原有程序不需要做任何修改。

還有呢?
增加示例代碼。比較 與 的代碼,完全解釋如何操作結構指針。

缺憾:指針僅支持指向字符型,而且要嘛取出指針的指向的值,要嘛取出指針地址。不夠靈活。

****** 以下文字為 Struct.Vcx 簡要使用說明:

定義結構成員:
Sturct.Add(lcType, lcItemName, [lnStringLength])

說明:
lnStringLength 在 類型為 "STRING","CHAR","CCHAR" 字符型是必選項,其餘數據類型始終忽略它.

返回值:無

*-- 設置成員
Sturct.SetItem(lcItemName, vNewVal)
或者:
Sturct.SetItem(lnItemOrder, vNewVal)

說明:
lcItemName 為字符型,lnItemOrder 為數值型。索引的順序是定義結構時的順序。

返回值:無

*-- 取出成員值
Sturct.GetItem(lcItemName, [lnIndex])
或者:
Sturct.GetItem(lnItemOrder, [lnIndex])

說明:
lcItemName 為字符型,lnItemOrder 為數值型。索引的順序是定義結構時的順序。
當 API 返回的是多個結構時,通過 lnIndex 指出訪問哪個結構的成員

返回值:
該成員所指定的類型,特別的指針成員總是返回其指向的內存空間,並只能返回字符串型。如果不想或者 API 結構定義裡它不是指向字符型,請以無符號整數定義其類型。

*-- 申請內存空間
Sturct.GetAddress([lnBufferSize])

說明:
GetAddress 將建立一個內存塊,並返回該內存地址。lnBufferSize 數值型,欲申請的內存塊大小,無指定 8K,如果該值小於結構的大小,強制與結構一般大小。當申請成功時,結構將同時被傳遞到該段內存,某些 API 需要有初始化值的結構來決定將要進行什麼操作。

返回值:
數值型,為 0 則是失敗的操作。

*-- 取回內存值到結構
Sturct.Getmemory()

說明:
Getmemory 重新取回由 GetAddress 所申請的那段內存值並送回到結構,並釋放銷毀該內存塊。在發出一條 GetAddress 後的第一條 GetItem 指令總是自動執行 Getmemory。Getmemory 應當在執行一條 API 後被執行。

返回值:無

*-- 重定義結構
Sturct.Clear()

說明:
Sturct.Clear() 將銷毀己定義的結構串,銷毀之後你可以重新定義,這樣的好處是如果你願意,你可以在你的程度始終只使用一個結構對象,而讓它不斷變化重新組織成不同結構。

返回值:無

*-- 其他:
結構的串保存在 Sturct.value,你可以用 Len(Sturct.value) 得到該結構的長度。你可以使用 Sturct.Dec2Asc(lnvalue, lnByte) 來轉換一個數值為一個字符串。lnByte 取值 1,2,4 代表轉換成 8 位數值、16位數值、32位數值的形狀串。你還可以使用 Sturct.Asc2Dec(lcString) 來執行這個逆轉換。

****** 以下是該類目前認識的數據類型

*-- 無符號整數
"BYTE", "WORD","DWORD","LPWORD","HDC","HWND","HANDLE"

*-- 有符號整數
"PSHORT","LONG"

*-- 指針
"LPTSTR", "LPCSTR","LPCTSTR","HINSTANCE"

*-- 字符型
"STRING","CHAR","CCHAR"

****** 全文完。
感謝 www.Myf1.netwww.Vfp.cn 的所有朋友,沒有他們提供的 API 源碼我無法完成那些隨這個結構同時奉上的 API 例程。

_________________
福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!

想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.

          愛作夢
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作