LR__调用dll文件,引用其中的全局变量
上一篇 /
下一篇 2012-02-19 15:23:34
/ 个人分类:loadRunner
最近项目中用到MD5加密的方法,无赖中在网上下载一源码,编译成dll后引用。但一直报错: Error: C interpreter run time error: Action.c (10): Error -- memory violation : Exception ACCESS_VIOLATION received.
以简单的下面程序来说明。
lr.cpp文件:
int result = 0;----这是全局变量
int sup(int x){
result = x;
return result;
}----在LR中调用sup方法
stdafx.h:
extern "C" _declspec(
dllimport) int result;
extern "C" _declspec(dllexport) int sup(int x);
LR脚本:
lr_load_dll("D:\\chenlistudy\\chenli\\lr\\Debug\\lr.dll");--写出全路径是,“\”要加转义符
lr_output_message("#%d",sup(3));
报错:Error: C interpreter run time error: Action.c (10): Error -- memory violation : Exception ACCESS_VIOLATION received.
后面找到原因,在函数定义、声明的时候都需要添加: extern "C" __declspec(dllexport)
lr.cpp改为:
extern "C" __declspec(dllexport) int fun(int x);
extern "C" __declspec(dllexport) int result = 0;
extern "C" __declspec(dllexport) int sup(int x){
result = x;
return result;
}
sup(int x)就可以正常调用
另外:C工程在编译是要编译为dll,编译为exe,LR也无法调用全局变量。大家可以试验一下。
补充:
extern "C" __declspec(dllexport)可以定义为宏。如下:
#ifdef TEST_EXPORTS
#define TEST_API extern "C" __declspec(dllimport)
#else
#define TEST_API extern "C" __declspec(dllexport)
#endif
TEST_API int result;
TEST_API int sup(int x);
其他地方定义、声明的时候,前面加上TEST_API即可。
收藏
举报
TAG:
dllimport
extern
lr_load_dll