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)可以定义为宏。如下:
stdafx.h:
#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

 

评分:0

我来说两句

日历

« 2024-05-15  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 16063
  • 日志数: 18
  • 建立时间: 2012-01-30
  • 更新时间: 2012-06-07

RSS订阅

Open Toolbar