国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Powerbuilder中的內存操作大搜集

2024-07-21 02:10:01
字體:
來源:轉載
供稿:網友

       我們知道pb中不支持指針,但我們在使用win32 api和調用一些dll中的外部函數時候,經常會與其打些交道,所以這里將相關的一些技巧收集整理起來。

1、根據字符串地址得到字符串

完全通過pb自帶的函數string就可以實現,函數的語法為string ( data, { format } ),當我們將變量

地址作為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)

麻煩是麻煩點,不過終于知道你藏身在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  levelend 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 = 12345lpmenuitemdata.level = 1il_menudatapointer= localalloc(0,6) //6=sizeof(menuitemdata)copymemory(il_menudatapointer,lpmenuitemdata,6)

//那么,如果再從內存塊中取出來呢??copymemory(lpmenuitemdata,   il_menudatapointer,6)//很簡單吧!

//現在,我不需要 il_menudatapointer這塊內存了localfree(il_menudatapointer)

搜集中......................waiting..........................
,歡迎訪問網頁設計愛好者web開發。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉义县| 塘沽区| 雷州市| 固始县| 牙克石市| 开原市| 两当县| 宽城| 甘谷县| 阜康市| 合水县| 绵阳市| 高青县| 房产| 泽库县| 平遥县| 汝州市| 河东区| 柳河县| 平邑县| 绿春县| 华池县| 德昌县| 綦江县| 屯昌县| 远安县| 青田县| 彩票| 原阳县| 栾城县| 治县。| 东山县| 湟源县| 乌审旗| 柳江县| 荃湾区| 荔波县| 安塞县| 丰都县| 永福县| 桓仁|