1. 程式人生 > >易語言 取自定義資料型別的大小

易語言 取自定義資料型別的大小

先說一下易語言的變數儲存機制

易語言有基本資料型別和複合資料型別兩種
基本資料型別包括:1. 各種整數 2.各種浮點 3. 邏輯值
他們都是儲存在棧上的 大小都是固定的 用不著取

複合型別一般儲存在堆上 然後在棧上儲存堆上資料的引用
其中有幾種比較特殊:字串 位元組集 陣列
這兩種型別的大小雖然儲存在堆上的某個地方
但都有專門的取大小函式 直接呼叫即可

剩下就是自定義資料型別 比如類或者結構
特別是類 類的資料成員都是私有的
假如你想知道別人寫的一個模組裡一個類的大小
不可能通過數資料成員的方法得到
那如何取到呢?有人可能提出用“取變數地址”這個函式
可惜的是 “取變數地址”取到的永遠是棧上的地址

根據上面所說 棧上地址的內容就是堆上地址
但是易語言沒有一個用指標取整數的函式
這就需要用一個系統api:RtlMoveMemory
這個函式跟c語言memcpy的功能一樣 但是有了他問題就變得容易的多
宣告一個整形變數a  ls是一個自定義的類或者結構
RtlMoveMemory (取變數地址 (a), 取變數地址 (LS), 4)
這樣a儲存的就是ls在堆區的地址

之後用到一個api:LocalSize
我們都知道堆區記憶體分配必然用到LocalAlloc/GlobalAlloc
那麼也能通過LocalSize取到大小
除錯輸出 (LocalSize (a))
之後這樣輸出的就是ls的大小

當然 相同的資料型別 大小肯定是不變的
每次需要的時候不用都取
取一次之後當常數用就好了