51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2310|回复: 4
打印 上一主题 下一主题

[原创] 如何在LR脚本里调用DELPHI的DLL?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-9-8 19:58:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用使用 lr_load_dll 函数来调用DLL,格式是这样子
    vuser_init()
    {
        lr_load_dll(
"DLL名");
   
    return
0;
    }
    Action()
    {
        变量= 参数代入内部函数

        lr_output_message(
"变量名=%d",变量);
        
return
0;
    }

不过由于需要传参数,就是上面说到的"变量= 参数代入内部函数"这一部分.假设DLL里有3个函数如下:

    function GetFile(const SvrFileName: WideString; const LclFileName: WideString;
                     OnProgress: Integer): Integer; safecall;
    function PutFile(const SvrFileName: WideString; const LclFileName: WideString;
                     OnProgress: Integer): Integer; safecall;
    function Init(const ServerAddr: WideString): Integer; safecall;

在LR脚本里要怎么传参数呢?例如 变量=GetFile(参数1,参数2)?可以这样直接调用DELPHI的函数吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-9-9 10:20:44 | 只看该作者
变量=GetFile(参数1,参数2)这样可以调用DLL文件的函数,但你的lr_load_dll 在vuser_init中,而你的变量在Action中不知道这样是否可行.如果都在Action中是没有问题的.
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2008-9-9 13:56:20 | 只看该作者
如果把 lr_load_dll("DLL名")写在ACTION里,那么每次执行ACTION的时候就会加载一次DLL,对性能没影响吗?有没完整的格式推荐一种啊
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2008-9-9 14:07:08 | 只看该作者
如果之前定义了一个类,如  TCoop = class(TAutoObject, ICoop)
DLL里的函数部分是写成:
function TCoop.GetFile(const SvrFileName, LclFileName: WideString; OnProgress: Integer): Integer;
那么我们在传参时用的是变量=TCoop.GetFile(参数1,参数2,参数3)吗
====================
是否要把DELPHI里的DLL搞成COM吗?
在C++里面只有类的静态函数才能够直接被使用,一般函数是不能直接被调用的

[ 本帖最后由 镭镭 于 2008-9-9 14:34 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2008-9-9 15:38:57 | 只看该作者
如果你的被测应用也部署在本机上,在测试过程中加载DLL会有影响的.至于你说的调用DLL文件中的函数,把返回值赋给一个变量以DLL文件中写的函数为准,如果被调用的函数存在上下文联系,那应该都封装在一个DLL文件中.
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-20 15:36 , Processed in 0.063574 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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