镭镭 发表于 2008-9-8 19:58:29

如何在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:44

变量=GetFile(参数1,参数2)这样可以调用DLL文件的函数,但你的lr_load_dll 在vuser_init中,而你的变量在Action中不知道这样是否可行.如果都在Action中是没有问题的.

镭镭 发表于 2008-9-9 13:56:20

如果把 lr_load_dll("DLL名")写在ACTION里,那么每次执行ACTION的时候就会加载一次DLL,对性能没影响吗?有没完整的格式推荐一种啊:'(

镭镭 发表于 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 编辑 ]

aks5201314 发表于 2008-9-9 15:38:57

如果你的被测应用也部署在本机上,在测试过程中加载DLL会有影响的.至于你说的调用DLL文件中的函数,把返回值赋给一个变量以DLL文件中写的函数为准,如果被调用的函数存在上下文联系,那应该都封装在一个DLL文件中.
页: [1]
查看完整版本: 如何在LR脚本里调用DELPHI的DLL?