我们知道pb中不支持指针,但我们在使用WIN32 API和调用一些dll中的外部函数时候,经常会与其打些交道,所以这里将相关的一些技巧收集整理起来。 1、根据字符串地址得到字符串 完全通过pb自带的函数String就可以实现,函数的语法为String ( data, { format } ),当我们将变量 地址作为Data参数,字符串“Address”作为format参数,函数的返回值就是我们需要的字符串。这是种 未公开(呵呵,pb的帮助中找不到),但被广泛使用的方法。 例:string ls_tmp 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.
定义实例变量:String is_dst string 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 前两个参数均是指针类型,因此我们可以根据需要在声明中将其定义为long或者ref ***的形式,反正都 是指变量的地址,根据需要定义喽! 例: 现在某个Api用到的结构中有一个long成员,用来存储另外一个结构Menuitemdata的地址,以备将来所需 。 结构menuitemdata 如下: type menuitemdata from structure 好了,看看怎么解决这个问题的。 相关外部函数声明: Function long LocalAlloc(long Flags, long Bytes) library "kernel32.dll" 实例变量:long il_menuDataPointer //下面代码将lpmenuitemdata 的内容复制到内存块il_menuDataPointer中 lpmenuitemdata.hmenu = 12345 //那么,如果再从内存块中取出来呢?? //现在,我不需要 il_menuDataPointer这块内存了 |
powerbuilder PB 操作内存
最新推荐文章于 2022-05-08 18:19:03 发布
PB操作内存