Powerbuilder中的記憶體操作大蒐集

2021-04-07 05:52:30 字數 2483 閱讀 8806

powerbuilder中的記憶體操作大蒐集

1、根據字串位址得到字串

完全通過pb自帶的函式string就可以實現,函式的語法為string ( data, ),當我們將變數位址作為data引數,字串「address」作為format引數,函式的返回值就是我們需要的字串。這是種未公開(呵呵,pb的幫助中找不到),但被廣泛使用的方法。

例:string ls_tmp

ls_tmp =string(hstrdata,"address")

2、得到pb中某個字串變數的位址

這次,單純依靠pb自身是行不通了,需要請來win api函式幫忙了:

主人公:function long lstrcpy(ref string destination, ref string source) library "kernel32.dll"

原型:the lstrcpy function copies a string to a buffer.

lptstr lstrcpy(

lptstr lpstring1, // address of buffer

lpctstr lpstring2  // address of string to copy

); return values:if the function succeeds, the return value is a pointer to the buffer.

看我怎麼大顯身手:

定義例項變數:string is_dst

string ls_src

long ll_address

ls_src= "test me"

ls_dst =space(255)  

ll_address=lstrcpy(ls_dst,ls_src) //將ls_src的內容複製到ls_dst,並返回ls_dst的儲存位址

麻煩是麻煩點,不過終於知道你藏身在ll_address那裡了。

3、在記憶體堆上分配空間,並儲存變數內容

這裡需要localalloc,localfree,copymemory三個api函式,其中localalloc,localfree用來申請、釋放記憶體塊,copymemory用來複製記憶體塊。

這裡著重說明一下copymemory函式,有三個引數   

pvoid destination, // address of move destination

const void *source, // address of block to move

dword length  // size, in bytes, of block to move 

前兩個引數均是指標型別,因此我們可以根據需要在宣告中將其定義為long或者ref ***的形式,反正都是指變數的位址,根據需要定義嘍!

例:現在某個api用到的某個結構中有乙個long成員,用來儲存另外乙個結構menuitemdata的位址,以備將來所需。

結構menuitemdata 如下:

type menuitemdata from structure

unsignedlong  hmenu

integer  level

end type

好了,看看怎麼解決這個問題的。

function long localalloc(long flags, long bytes) library "kernel32.dll"

function long localfree(long memhandle) library "kernel32.dll"

subroutine copymemory(long pdesc, ref menuitemdata psrc,ulong size) library "kernel32" alias for "rtlmovememory"

subroutine copymemory(ref menuitemdata pdesc, long psrc,ulong size) library "kernel32" alias for "rtlmovememory"

例項變數:long il_menudatapointer

menuitemdata lpmenuitemdata

//下面**將lpmenuitemdata 的內容複製到記憶體塊il_menudatapointer中

lpmenuitemdata.hmenu = 12345

lpmenuitemdata.level = 1

il_menudatapointer= localalloc(0,6) //6=sizeof(menuitemdata)

copymemory(il_menudatapointer,lpmenuitemdata,6)

//那麼,如果再從記憶體塊中取出來呢??

copymemory(lpmenuitemdata,il_menudatapointer,6)//很簡單吧!

//現在,我不需要 il_menudatapointer這塊記憶體了

localfree(il_menudatapointer)

GRAPH在PowerBuilder中的應用

graph在powerbuilder中的應用 在使用powerbuilder時,有時會用到graph。它作為一種輸出工具 直觀地顯示使用者想要看到的資料及資料間的關係 我們一般不通過它進行資料輸入 可以有兩種方法將gr aph放入使用者介面。其一是通過資料窗,使graph成為資料視窗的一部分,或本身...

PowerBuilder中對NULL的徹底解釋

null代表不知道或者沒有定義,和空值完全不同。例如,在資料庫中某欄位取值為null,代表使用者還沒有處理這個欄位的資料,有待於處理 而如果該欄位取值為空,代表這個欄位的資料使用者做了處理,這個欄位的取值是清楚的。當變數定義後,變數沒有取值,應該為null,但實際上不是這樣。powerbuilder...

PowerBuilder中對NULL的徹底解釋

null代表不知道或者沒有定義,和空值完全不同。例如,在資料庫中某欄位取值為null,代表使用者還沒有處理這個欄位的資料,有待於處理 而如果該欄位取值為空,代表這個欄位的資料使用者做了處理,這個欄位的取值是清楚的。當變數定義後,變數沒有取值,應該為null,但實際上不是這樣。powerbuilder...