51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3906|回复: 1
打印 上一主题 下一主题

[原创] 关于QTP中Extern对象的使用问题!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-9-22 17:22:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
某staf.dll中有如下函数
int Submit(char **resultPtr, unsigned int *resultLength);
次函数会通过参数resultPtr返回内存中一字符串的首地址,字符串长度为resultLength

kernel32.dll中有如下函数
void RtlMoveMemory(
  PVOID Destination,
  const VOID* Source,
  SIZE_T Length
);
此函数为windows sdk提供的函数,从首地址source移动Length字节的内容到首地址Destination,具体可参看msdn文档

在QTP中想调用第1个函数得到字符串地址和长度,再通过第2个函数复制到QTP中申明的变量中,脚本如下:
1   Extern.Declare micLong, "Submit", "STAF.dll", "Submit", micVPtr+micByRef ,micByRef+micLong
2   Extern.Declare micVoid, "MoveMemory", "kernel32.dll", "RtlMoveMemory", micVPtr, micVPtr, micLong
3
4   resultPtr = 0
5   resultLen = 0
6   ret = Extern.Submit (resultPtr, resultLen)
7   msgbox(resultLen)   '4
8   msg = space(resultLen)
9   Extern.MoveMemory msg, resultPtr, resultLen
10  msgbox(msg)

结果执行到第9行报"无效的过程调用或参数: 'Extern.CopyMemory'"
如果将第2行申明改为
2   Extern.Declare micVoid, "MoveMemory", "kernel32.dll", "RtlMoveMemory", micString+micByRef, micVPtr, micLong
执行不抱错,但是第21行弹出的对话框中显示为空字符串, 实际返回的resultLen大于0

请问如何可以得到字符串的内容?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2006-9-25 15:35:22 | 只看该作者
惭愧
还不知道QTP可以实现这样的功能
等有时间一定试试
帮你顶
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 11:39 , Processed in 0.067255 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表