51Testing软件测试论坛

标题: LR中加载DLL出错 [打印本页]

作者: fairylly    时间: 2009-1-5 11:43
标题: LR中加载DLL出错
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 编辑 ]
作者: songlilimnky    时间: 2009-1-5 11:47
是不是LR只支持C?等待高手~~
作者: fairylly    时间: 2009-1-5 12:01
VC++编写程序时,每个函数的开头我都有加:extern "C"
编译时,应该都是按照标准C的方式来编译的
作者: archonwang    时间: 2009-1-5 12:32
lr_load_dll("MonitorTest.dll");

用法错误,需要指定绝对路径。
作者: fairylly    时间: 2009-1-5 12:55
我尝试过绝对路径,但一样报错
另外,我在另一个LR脚本中,使用lr_load_dll();函数调用别的DLL文件时,用的是相对路径(有把dll文件复制到脚本目录下),回放成功,运行场景也成功

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

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

但都还是报一样的错误信息
作者: sqlserveroracle    时间: 2009-1-5 15:06
loadrunner只能调用c方式的动态链接库,所以在每个到处函数前面需要加上extern "C"
一般情况下,在.h文件里面这样写:
#ifdef __cplusplus
extern "C" {
#endif

some export function

#ifdef __cplusplus
}
#endif

这样c,c++都可以用

还有,LoadRunner每50个用户就会启动mdrv.exe.所以你设计的dll不仅要求进程安全还要求线程是安全的,呵呵
我曾经为这个为题找了好长时间,祝你好运
作者: leey    时间: 2009-1-5 15:08
是不是还调用了其他的dll,是用vc6 or vc7?
vc7的话有时需要把一些公共库文件也放进来,比如 ***70.dll
作者: fairylly    时间: 2009-1-5 15:24
标题: 回复 7# 的帖子
在VC++中编写的程序
.h头文件声明函数时,都有extern "C"
另外写的一个程序也是同样的方法,可以正常使用

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

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

[ 本帖最后由 fairylly 于 2009-1-5 15:25 编辑 ]
作者: fairylly    时间: 2009-1-5 15:26
标题: 回复 8# 的帖子
我使用的是VC6
没有调用到别的什么DLL文件啊
作者: yugisnow    时间: 2009-1-5 21:51
用VC6的 depends工具打开编译好的DLL,看看这个DLL下面有没用到其他库,如果有把他们放到system32文件夹
作者: fairylly    时间: 2009-1-6 08:44
标题: 回复 11# 的帖子
depend查看,没看出什么问题啊[attach]48160[/attach]
作者: yugisnow    时间: 2009-1-13 11:40
这个libmysql.dll呢,把它放到system32试试

[ 本帖最后由 yugisnow 于 2009-1-13 11:41 编辑 ]
作者: 大漠飞鹰    时间: 2009-1-13 14:28
可以是路径中有中文,改成英文试试。
作者: fairylly    时间: 2009-1-13 15:09
标题: 回复 13# 的帖子
把libmysql.dll放到loadrunner脚本目录下就正确了
不大了解depend,后经高人指点才明白如何看库之间的关系
作者: xinqidian123    时间: 2010-10-14 16:54
LR监控Mysql使用的DLL库中的
MonitorTest.def 下面的代码是什么?没有找到相应的位置。。编译不过是因为它吗?
作者: lyss_85    时间: 2010-10-14 22:32
通过网上查资料,写调用DLL需要选择支持C语言的协议,所以你需要选择一个支持C的协议才能使用lr_load_dll();函数
其次制作dll时需要在在每个到处函数前面需要加上extern "C",好像还有其他的一些东西,
我用的函数例子是lr_load_dll("D:/lr_dll/dll1/dlldemo1.dll");  dll文件是自己做的,在lr中正常调用




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