51Testing软件测试论坛

标题: 如何在LR脚本里调用DELPHI的DLL? [打印本页]

作者: 镭镭    时间: 2008-9-8 19:58
标题: 如何在LR脚本里调用DELPHI的DLL?
我使用使用 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的函数吗?
作者: aks5201314    时间: 2008-9-9 10:20
变量=GetFile(参数1,参数2)这样可以调用DLL文件的函数,但你的lr_load_dll 在vuser_init中,而你的变量在Action中不知道这样是否可行.如果都在Action中是没有问题的.
作者: 镭镭    时间: 2008-9-9 13:56
如果把 lr_load_dll("DLL名")写在ACTION里,那么每次执行ACTION的时候就会加载一次DLL,对性能没影响吗?有没完整的格式推荐一种啊
作者: 镭镭    时间: 2008-9-9 14:07
如果之前定义了一个类,如  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 编辑 ]
作者: aks5201314    时间: 2008-9-9 15:38
如果你的被测应用也部署在本机上,在测试过程中加载DLL会有影响的.至于你说的调用DLL文件中的函数,把返回值赋给一个变量以DLL文件中写的函数为准,如果被调用的函数存在上下文联系,那应该都封装在一个DLL文件中.




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2