fairylly 发表于 2009-1-5 11:43:46

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:06

是不是LR只支持C?等待高手~~

fairylly 发表于 2009-1-5 12:01:35

VC++编写程序时,每个函数的开头我都有加:extern "C"
编译时,应该都是按照标准C的方式来编译的

archonwang 发表于 2009-1-5 12:32:55

lr_load_dll("MonitorTest.dll");

用法错误,需要指定绝对路径。

fairylly 发表于 2009-1-5 12:55:48

我尝试过绝对路径,但一样报错
另外,我在另一个LR脚本中,使用lr_load_dll();函数调用别的DLL文件时,用的是相对路径(有把dll文件复制到脚本目录下),回放成功,运行场景也成功

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

[ 本帖最后由 fairylly 于 2009-1-5 15:05 编辑 ]

fairylly 发表于 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文件正常)

但都还是报一样的错误信息

sqlserveroracle 发表于 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不仅要求进程安全还要求线程是安全的,呵呵
我曾经为这个为题找了好长时间,祝你好运

leey 发表于 2009-1-5 15:08:54

是不是还调用了其他的dll,是用vc6 or vc7?
vc7的话有时需要把一些公共库文件也放进来,比如 ***70.dll

fairylly 发表于 2009-1-5 15:24:05

回复 7# 的帖子

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

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

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

[ 本帖最后由 fairylly 于 2009-1-5 15:25 编辑 ]

fairylly 发表于 2009-1-5 15:26:12

回复 8# 的帖子

我使用的是VC6
没有调用到别的什么DLL文件啊

yugisnow 发表于 2009-1-5 21:51:59

用VC6的 depends工具打开编译好的DLL,看看这个DLL下面有没用到其他库,如果有把他们放到system32文件夹

fairylly 发表于 2009-1-6 08:44:54

回复 11# 的帖子

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

yugisnow 发表于 2009-1-13 11:40:34

这个libmysql.dll呢,把它放到system32试试

[ 本帖最后由 yugisnow 于 2009-1-13 11:41 编辑 ]

大漠飞鹰 发表于 2009-1-13 14:28:46

可以是路径中有中文,改成英文试试。

fairylly 发表于 2009-1-13 15:09:47

回复 13# 的帖子

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

xinqidian123 发表于 2010-10-14 16:54:33

LR监控Mysql使用的DLL库中的
MonitorTest.def 下面的代码是什么?没有找到相应的位置。。编译不过是因为它吗?

lyss_85 发表于 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]
查看完整版本: LR中加载DLL出错