国产探花免费观看_亚洲丰满少妇自慰呻吟_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開發。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 内丘县| 尼玛县| 嵩明县| 宁强县| 营山县| 汶川县| 疏附县| 凌海市| 沂源县| 喀什市| 视频| 冷水江市| 陆丰市| 南阳市| 沽源县| 杂多县| 肇源县| 炎陵县| 西充县| 鄂州市| 黄陵县| 卓尼县| 鄯善县| 华阴市| 澎湖县| 英吉沙县| 且末县| 龙泉市| 平昌县| 广灵县| 卓尼县| 会同县| 大余县| 阿坝县| 鄄城县| 定兴县| 海宁市| 正安县| 本溪市| 克山县| 襄城县|