工具准备阶段: loadrunner, VC20081. Microsoft Visual Studio2008 (vc9 vc2008)D:\Program Files\Microsoft Visual Studio 9.0\
vc2008个头大,安装完1.6G左右,考虑到我可怜的C盘,还是挪窝
2. Mercury Loadrunner (LR8.1)C:\Program Files\Mercury Interactive\Mercury LoadRunner
默认路径,LR8.1个头也不小,600M左右
3. 编译环境设置3.1. 菜单文件-->新建-->项目 或者快捷键 ctrl+shift+N (看不清,点图放大)
3.2. 确定后,再点下一步, 不要直接点完成哦(看不清,点图放大)
3.3. 完成的,最终成果(看不清,点图放大):
4. 洗洗手,开始上把,先来个简单的4.1 编辑lr_dll_test.h 头文件
在自动生成的fnlr_dll_test函数声明前,加上extern "C"
//自动生成的
//
LR_DLL_TEST_API int fnlr_dll_test(void);//修改后的, 因为LR只支持C,不支持C++,所有加上extern "C",
//告诉编译器,用C语法编译器
extern "C"LR_DLL_TEST_API int fnlr_dll_test(void);4.2 编辑 lr_dll_test.cpp
//根据兴趣修改自动导出示例
// 这是导出函数的一个示例。
LR_DLL_TEST_API int fnlr_dll_test(void)
{
int a = 50;
int b = 200;
return a+b;
}
4.3 大功告成(简单吧,其实只加了一句
extern "C"),开始编译
菜单 生成->生成解决方案 或 快捷键 F7, 在lr_dll_test\Debug
目录下生成lr_dll_test.dll。
5. LR调用DLL方法,有两种 5.1一种是通过lr_load_dll函数,
5.1.1直接指定路径lr_load_dll("D:\\vc2008\\lr_dll_test\\Debug\\dll_test.dll");
注意是两反斜杠 5.1.2 拷贝DLL到LR脚本目录,或者LR安装目录,直接lr_load_dll("dll_test.dll")
C:\Program Files\Mercury Interactive\Mercury LoadRunner\bin
5.2第二种是全局
调用,VUGen启动时自动加载
修改,LR安装目录,dat子目录下的mdrv.dat文件,[lrun] 字段,在末尾添加
C:\Program Files\Mercury Interactive\Mercury LoadRunner\dat\mdrv.dat
[lrun]
ExtPriorityType=communication
WINNT_EXT_LIBS=lrun50.dll
WIN95_EXT_LIBS=lrun50.dll
LINUX_EXT_LIBS=libLrun50.so
SOLARIS_EXT_LIBS=libLrun50.so
HPUX_EXT_LIBS=libLrun50.sl
AIX_EXT_LIBS=libLrun50.so
LibCfgFunc=lr_configure
ExtMessageQueue=0
WINNT_DLLS=dll_test.dll 5.3, 写个简单的脚本,调用刚才写的 fnlr_dll_test
6.注意点:
6.1 DLL导出函数,需返回整形,如需返回char*型,
LR调研时需加上强制转换,同理,返回结构指针也需强制转换
p = (char*)fnlr_dll_test2(buff, 2); 不然会出错
“have illegal types `pointer to char' and `int'"
6.2 DLL导出函数,动态申请的内存,无法在LR脚本中释放free,
需另写一个free的导出函数。
出错信息: memory violation : Exception ACCESS_VIOLATION received
6.3 LR不支持C++,当然无法导出类,引用调用等c++才有的特征