PB中如何取得结构中某一变量的内存地址?

yshuih 2010-03-30 12:37:31
PB中对内存指针的操作非常麻烦,虽然可以使用API函数lstrcpy对字符串变量取得内存地址,可怎么取得结构变量中的某一变量的内存地址呢?(我的结构里变量都为整型的变量)
...全文
230 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhgwbzhd 2010-03-30
  • 打赏
  • 举报
回复
我觉得你这个没有问题啊。

下面是我的测试代码:
在st_1内会写出分配的空间句柄。
st_2内会写出a=255,b=255,c=255

il_menuDataPointer= LocalAlloc(0,6) //分配内存 6=sizeof(menuitemdata)

st_1.text = string(il_menuDataPointer)

is_text.a = 255
is_text.b = 255
is_text.c = 255

iis_text.a = 0
iis_text.b = 0
iis_text.c = 0

//写入数据
CopyMemory(il_menuDataPointer,is_text,6)


//从内存块中取出数据
CopyMemory(iis_text,il_menuDataPointer,6)

st_2.text = "a=" + string(iis_text.a) + ",b=" + string(iis_text.b) + ",c=" + string(iis_text.c)
yshuih 2010-03-30
  • 打赏
  • 举报
回复
我使用的是PB8.03,使用下面的几个API函数取得结构s_text的内存地址:
Function long LocalAlloc(long Flags, long Bytes) library "kernel32.dll"
Function long LocalFree(long MemHandle) library "kernel32.dll"
SUBROUTINE CopyMemory(long pDesc, ref s_text pSrc,ulong size) LIBRARY "kernel32" ALIAS FOR "RtlMoveMemory"
SUBROUTINE CopyMemory(ref s_text pDesc, long pSrc,ulong size) LIBRARY "kernel32" ALIAS FOR "RtlMoveMemory"

事件里用如下方法找到结构的内存地址
long il_menuDataPointer //内存的指针

il_menuDataPointer= LocalAlloc(0,6) //分配内存 6=sizeof(menuitemdata)
//写入数据
CopyMemory(il_menuDataPointer,is_text,6)

//从内存块中取出数据
CopyMemory(is_text,il_menuDataPointer,6)
messagebox("",il_menuDataPointer)
//释放 il_menuDataPointer指示的内存块
LocalFree(il_menuDataPointer)


不知这个il_menuDataPointer得到的是不是结构的第一个变量的地址?
貌似用这个地址不对
zhgwbzhd 2010-03-30
  • 打赏
  • 举报
回复
PB9中。
int也就是整形是16位的,占用2个字节。

如果你的结构定义如下:

integer a
integer b
integer c
integer d

那么应该a的内存地址就是结构的地址。
b的就向后移动2个字节。
c的向后移动4个字节。
d的向后移动6个字节。


yshuih 2010-03-30
  • 打赏
  • 举报
回复
结构的内存地址貌似可以取一个,但不知如何向后计算呢?
zhgwbzhd 2010-03-30
  • 打赏
  • 举报
回复
如果你有办法取到结构的内存地址。
向后计算就好了。

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧