51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 9363|回复: 16
打印 上一主题 下一主题

[原创] LR中加载DLL出错

[复制链接]
  • TA的每日心情
    无聊
    2018-2-28 12:22
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    跳转到指定楼层
    1#
    发表于 2009-1-5 11:43:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    vuser_init()
    {
            lr_load_dll("MonitorTest.dll");
            return 0;
    }
    错误信息:

    vuser_init.c(3): 错误: C interpreter run time error: vuser_init.c (3):  Error -- File error : LoadLibrary(MonitorTest.dll) failed : 找不到指定的模块。
    vuser_init.c(3): 通知: CCI 跟踪: vuser_init.c(3): ci_load_dll(0x0101b0cc, 0x0152026c "MonitorTest.dll")
    vuser_init.c(3): 通知: CCI 跟踪: Compiled_code(0): vuser_init()


    MonitorTest.dll是我用vc++编绎的DLL库,编绎正常,且导出成DLL时也都提示正常
    DLL也已复制到LR脚本目录下
    lr_load_dll();函数中,也尝试过使用绝对路径,但报一样的错(名称显示绝对路径的名称)

    请问我还有什么地方应该注意,或可能出错的呢?

    [ 本帖最后由 fairylly 于 2009-1-5 14:32 编辑 ]
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    2#
    发表于 2009-1-5 11:47:06 | 只看该作者
    是不是LR只支持C?等待高手~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-2-28 12:22
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    3#
     楼主| 发表于 2009-1-5 12:01:35 | 只看该作者
    VC++编写程序时,每个函数的开头我都有加:extern "C"
    编译时,应该都是按照标准C的方式来编译的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-2-28 18:04
  • 签到天数: 40 天

    连续签到: 1 天

    [LV.5]测试团长

    4#
    发表于 2009-1-5 12:32:55 | 只看该作者
    lr_load_dll("MonitorTest.dll");

    用法错误,需要指定绝对路径。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-2-28 12:22
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    5#
     楼主| 发表于 2009-1-5 12:55:48 | 只看该作者
    我尝试过绝对路径,但一样报错
    另外,我在另一个LR脚本中,使用lr_load_dll();函数调用别的DLL文件时,用的是相对路径(有把dll文件复制到脚本目录下),回放成功,运行场景也成功

    这个脚本,也是同样的调用过程,也有把dll文件复制到脚本目录下,但出错
    所以想不明白

    [ 本帖最后由 fairylly 于 2009-1-5 15:05 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-2-28 12:22
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    6#
     楼主| 发表于 2009-1-5 15:06:07 | 只看该作者
    我尝试过以下操作:
    1、修改路径(使用了绝对路径及相对路径);
    2、在环境变量的path中增加DLL文件目录;
    3、复制DLL文件到C:\WINDOWS\system32目录下;
    4、查看Mercury\LoadRunner\dat\mdrv.dat文件,是否加载该dll文件(没有加载)
    5、再新建一个LR脚本文件,调用该DLL,同样报错(调用别的DLL文件正常)

    但都还是报一样的错误信息
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2009-1-5 15:06:44 | 只看该作者
    loadrunner只能调用c方式的动态链接库,所以在每个到处函数前面需要加上extern "C"
    一般情况下,在.h文件里面这样写:
    #ifdef __cplusplus
    extern "C" {
    #endif

    some export function

    #ifdef __cplusplus
    }
    #endif

    这样c,c++都可以用

    还有,LoadRunner每50个用户就会启动mdrv.exe.所以你设计的dll不仅要求进程安全还要求线程是安全的,呵呵
    我曾经为这个为题找了好长时间,祝你好运
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2009-1-5 15:08:54 | 只看该作者
    是不是还调用了其他的dll,是用vc6 or vc7?
    vc7的话有时需要把一些公共库文件也放进来,比如 ***70.dll
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-2-28 12:22
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    9#
     楼主| 发表于 2009-1-5 15:24:05 | 只看该作者

    回复 7# 的帖子

    在VC++中编写的程序
    .h头文件声明函数时,都有extern "C"
    另外写的一个程序也是同样的方法,可以正常使用

    出错的这个DLL文件,是在网上复制别人运行通过的脚本,想自己调试下的
    有做了些修改,但应该是没什么问题
    编译都是正常的

    谢谢你的回复
    等下我会再从DLL文件本身查看下是否存在问题

    [ 本帖最后由 fairylly 于 2009-1-5 15:25 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-2-28 12:22
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    10#
     楼主| 发表于 2009-1-5 15:26:12 | 只看该作者

    回复 8# 的帖子

    我使用的是VC6
    没有调用到别的什么DLL文件啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2009-1-5 21:51:59 | 只看该作者
    用VC6的 depends工具打开编译好的DLL,看看这个DLL下面有没用到其他库,如果有把他们放到system32文件夹
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-2-28 12:22
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    12#
     楼主| 发表于 2009-1-6 08:44:54 | 只看该作者

    回复 11# 的帖子

    depend查看,没看出什么问题啊

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2009-1-13 11:40:34 | 只看该作者
    这个libmysql.dll呢,把它放到system32试试

    [ 本帖最后由 yugisnow 于 2009-1-13 11:41 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2009-1-13 14:28:46 | 只看该作者
    可以是路径中有中文,改成英文试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-2-28 12:22
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    15#
     楼主| 发表于 2009-1-13 15:09:47 | 只看该作者

    回复 13# 的帖子

    把libmysql.dll放到loadrunner脚本目录下就正确了
    不大了解depend,后经高人指点才明白如何看库之间的关系
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2010-10-14 16:54:33 | 只看该作者
    LR监控Mysql使用的DLL库中的
    MonitorTest.def 下面的代码是什么?没有找到相应的位置。。编译不过是因为它吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2010-10-14 22:32:06 | 只看该作者
    通过网上查资料,写调用DLL需要选择支持C语言的协议,所以你需要选择一个支持C的协议才能使用lr_load_dll();函数
    其次制作dll时需要在在每个到处函数前面需要加上extern "C",好像还有其他的一些东西,
    我用的函数例子是lr_load_dll("D:/lr_dll/dll1/dlldemo1.dll");  dll文件是自己做的,在lr中正常调用
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-17 14:53 , Processed in 0.094726 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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