51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3151|回复: 5
打印 上一主题 下一主题

[原创] DLL使用初探 欢迎拍砖

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-4-14 10:10:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
LR下dll文件的制作与使用

        在Windows操作系统中使用DLL有很多优点,最主要的一点是多个应用程序、甚至是不同语言编写的应用程序可以共享一个DLL文件,真正实现了资源"共享",大大缩小了应用程序的执行代码,更加有效的利用了内存;使用DLL的另一个优点是DLL文件作为一个单独的程序模块,封装性、独立性好,在软件需要升级的时候,开发人员只需要修改相应的DLL文件就可以了,而且,当DLL中的函数改变后,只要不是参数的改变,程序代码并不需要重新编译。这在编程时十分有用,大大提高了软件开发和维护的效率。
        以上为废话 呵呵
        在LR下也可以直接调用动态链接库文件,针对一些使用LR脚本编写比较烦琐的方法可以考虑此方法(比如各种加解密算法的实现,数据库的操作等),并能够使测试脚本简单明了。鉴于此,本人初次尝试了如何制作DLL文件并在LR中使用。
        1、dll文件的制作
        在Visual C++6.0开发环境下,打开File-New-Project选项,可以选择Win32 Dynamic-Link Library来创建一个名为dllfortest的空的dll工程(这只是方法之一)。
        在该项目中新建一个dllfortest.h和dllfortest.cpp文件,文件的内容如下:
//dllfortest.h
extern "C" _declspec(dllexport) int Max(int a, int b, int c);
extern "C" _declspec(dllexport) int Min(int a, int b, int c);

//dllfortest.cpp  包含一个计算三个整数中最大值和最小值的方法
#include"dllfortest.h"
int Max(int a, int b, int c)
{
        int Res;
        Res = (a>b? a:b)>c? (a>b? a:b):c;
        return Res;
}
int Min(int a, int b, int c)
{
        int Res;
        Res = (a>b? b:a)>c? ca>b? b:a);
        return Res;
}
该动态链接库编译成功后,打开dllfortest工程目录下的debug目录下,可以看到生成了一个dllfortest.dll文件,这就是我们想要的文件。
        2、dll文件在LR中的调用
        打开LR VU Generator,选择C Vuser协议(或其他支持 C 的协议),进入编辑界面。Action部分如下所示:
Action()
{
        lr_load_dll("dllfortest.dll");
        lr_message("Max Result is %d",Max(100,200,67));
        lr_message("Min Result is %d",Min(55,97,63));
        return 0;
}
将dllfortest.dll文件复制到脚本所在的目录(如果不复制的话,lr_load_dll的参数应该写成dll文件的绝对路径),如果编译没有报错的话,就可以直接运行了。
运行结果如下:
Virtual User Script started
Starting action vuser_init.
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Action.
Max Result is 200
Min Result is 55
Ending action Action.
Ending iteration 1.
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.

如果在脚本中用到了DLL文件中并不存在的方法名时,编译也能通过,但是运行时LR会报错,提示不存在该方法
比如我们在脚本中添加一句:
        lr_message("Min Result is %d",Sum(55,97,63));  //Sum方法并不存在
运行时错误信息如下:
Action.c(7): Error: C interpreter run time error: Action.c (7):  Error -- Unresolved symbol : Sum.
Action.c(7): Notify: CCI trace: Compiled_code(0): Action()
.
这个例子并没有体现出DLL文件调用的优点,因为调用的方法在LR中用C直接就可以完成,但涉及到LR中完不成的任务时,或许dll文件的作用就体现出来了



[ 本帖最后由 selon 于 2007-4-14 10:12 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

6#
发表于 2007-7-3 11:16:08 | 只看该作者

好神奇

看来C语言还是不能丢弃的
努力学习中
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-7-3 08:58:36 | 只看该作者
非常有启发,,,
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-4-16 10:47:17 | 只看该作者
哈哈 一起学习
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-4-15 22:18:49 | 只看该作者
非常感谢你的付出,我们大家都很感
回复 支持 反对

使用道具 举报

该用户从未签到

2#
发表于 2007-4-14 13:41:39 | 只看该作者
多谢共享。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-24 19:06 , Processed in 0.083998 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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