关于32位64位程序兼容性的问题

mariowjf 2008-10-09 11:42:30
我用vb.net做了个程序,用来读取其他程序的list view控件里的文本,需要声明一个结构体LVITEM
Public Structure LVITEM
... ...
Dim pszText As Int32
... ...
End Structure ' LVITEM
我要先把这个结构体写进目标程序的内存,然后发消息给目标程序的listview控件,让它把数据写进我的结构体,然后我再从目标程序的内存里把这个结构体读回来,其中有我想要的文本在目标程序内存中的地址,我再到这个地址把文本读出来,大功告成!
关于pszText字段的类型,当我的程序在64位系统上运行时,如果目标程序是32位的(我看到该程序在任务管理器进程列表里的名字有*.32的后缀),pszText字段应该是int32类型,如果目标程序是64位的,则pszText应该是intptr类型。
也就是说,在32位和64位程序中用的LVITEM结构体的数据类型不同,结构体字节长度也不同。而在我的程序中,我的程序中定义的LVITEM的数据类型只和我自己有关(假定我的程序是一个始终运行在64位系统上的64位程序),不能根据其他程序的特性来自动适应。
我想请教的是:
这个适应性的问题应该怎么解决?难道只有事先定义两个不同类型结构体LVITEM1和LVITEM2,每次判断目标程序是32位还是64位,然后分别使用相应的结构体?
顺便请教:
怎么判断目标程序是32位的还是64位的?
...全文
796 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
宝_爸 2008-10-14
  • 打赏
  • 举报
回复
能不能不用Int32作为类型,试试.net中的指针IntPtr.
CloneCenter 2008-10-13
  • 打赏
  • 举报
回复
应该是使用不能版本的编译器编译程序就可以了。
64位的用64位的编译器。
mariowjf 2008-10-09
  • 打赏
  • 举报
回复
考虑过,问题是我的程序的编译和运行都是在64位下的,只是它挖掘的外部程序会不同,这个怎么办呢?
chaircat 2008-10-09
  • 打赏
  • 举报
回复
用编译器指令判断...
比如C#的
#if x64

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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