导出函数dll库的使用,测试
2013-08-01 13:21
447 查看
首先新建一个导出库a.dll
新建工程a选动态库
/////////////////////////////////头文件a.h:///////////////////////////////////
#ifdef A_EXPORTS
#define A_API __declspec(dllexport)
#else
#define A_API __declspec(dllimport)
#endif
// 此类是从 a.dll 导出的
class A_API Ca {
public:
Ca(void);
// TODO: 在此添加您的方法。
int getValue();
};
//导出变量
extern A_API int na;
//导出函数,注意此处要加extern "C",否则在使用导出库时可以加载dll,但GetProcAddress()返回NULL
//具体原因还没来得及查
extern "C" A_API int getValueFunc(void);
/////////////////////////////////头文件a.cpp:///////////////////////////////////
#include "stdafx.h"
#include "a.h"
// 这是导出变量的一个示例
A_API int na=0;
// 这是导出函数的一个示例。
A_API int getValueFunc(void)
{
return 200;
}
// 这是已导出类的构造函数。
// 有关类定义的信息,请参阅 a.h
Ca::Ca()
{
return;
}
int Ca::getValue()
{
return 100;
}
编译后生成a.dll和a.lib,下面只使用a.dll
新建工程test,在工程属性配置中使用a头文件,将a.dll copy到本工程生成exe的目录,也可将a.dll所在目录添加至环境变量
///////////////////////////////////////////////使用a.dll//////////////////////////////////////////////////////////////////////////
// test.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include "a.h"
#include <iostream>
#include <windows.h>
using namespace std;
typedef int (*lpFun)(void);
int _tmain(int argc, _TCHAR* argv[])
{
//load dll
HINSTANCE glibsample = NULL;
glibsample = LoadLibrary(_T("a.dll"));
if (glibsample != NULL)
{
lpFun myfun = (lpFun)GetProcAddress(glibsample, "getValueFunc");
if (myfun != NULL)
{
std::cout<<"x = "<< myfun() <<std::endl;
}
Ca myA;
myA.getValue();
}
FreeLibrary(glibsample);
return 0;
}
运行后输出x = 200,测试正确
新建工程a选动态库
/////////////////////////////////头文件a.h:///////////////////////////////////
#ifdef A_EXPORTS
#define A_API __declspec(dllexport)
#else
#define A_API __declspec(dllimport)
#endif
// 此类是从 a.dll 导出的
class A_API Ca {
public:
Ca(void);
// TODO: 在此添加您的方法。
int getValue();
};
//导出变量
extern A_API int na;
//导出函数,注意此处要加extern "C",否则在使用导出库时可以加载dll,但GetProcAddress()返回NULL
//具体原因还没来得及查
extern "C" A_API int getValueFunc(void);
/////////////////////////////////头文件a.cpp:///////////////////////////////////
#include "stdafx.h"
#include "a.h"
// 这是导出变量的一个示例
A_API int na=0;
// 这是导出函数的一个示例。
A_API int getValueFunc(void)
{
return 200;
}
// 这是已导出类的构造函数。
// 有关类定义的信息,请参阅 a.h
Ca::Ca()
{
return;
}
int Ca::getValue()
{
return 100;
}
编译后生成a.dll和a.lib,下面只使用a.dll
新建工程test,在工程属性配置中使用a头文件,将a.dll copy到本工程生成exe的目录,也可将a.dll所在目录添加至环境变量
///////////////////////////////////////////////使用a.dll//////////////////////////////////////////////////////////////////////////
// test.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include "a.h"
#include <iostream>
#include <windows.h>
using namespace std;
typedef int (*lpFun)(void);
int _tmain(int argc, _TCHAR* argv[])
{
//load dll
HINSTANCE glibsample = NULL;
glibsample = LoadLibrary(_T("a.dll"));
if (glibsample != NULL)
{
lpFun myfun = (lpFun)GetProcAddress(glibsample, "getValueFunc");
if (myfun != NULL)
{
std::cout<<"x = "<< myfun() <<std::endl;
}
Ca myA;
myA.getValue();
}
FreeLibrary(glibsample);
return 0;
}
运行后输出x = 200,测试正确
相关文章推荐
- 在selenium测试中使用XPATH功能函数starts-with、contains、descendant、ancestor、text()定位网页元素
- 在应用层使用ntdll.dll中的未导出函数
- C/C++ (函数、变量和类)动态库的创建、导出和使用
- 使用sqlite3的接口函数完成一个用户登录验证功能模块设计 要封装成独立函数,在独立的main中调用测试;
- 使用dumpbin(vs自带工具)命令查看dll、lib,导出函数(copy)
- DLL 函数导出和使用
- 内核模块中函数的导出和使用
- map函数使用测试
- 使用dumpbin命令查看dll导出函数及重定向输出到文件【轉】
- JMeter 压力测试使用函数和 CSV 文件参数化 json 数据
- 使用dumpbin命令查看dll导出函数及重定向输出到文件
- CCS5.5环境下使用clock()函数测试程序段运行时间
- 使用动态包导出函数的调用单元完整源代码
- 使用NPOI组件完成的Excel导出导入(附源代码,测试通过)
- linux中使用pthread_kill函数测试线程是否存活的例子
- C++静态库中使用_declspec(dllexport) 不能导出函数的问题
- 雾山的Robotium学习笔记---使用junitreport导出测试报告
- linux中使用pthread_kill函数测试线程是否存活
- 使用动态包导出函数的单元的完整源代码
- rollup函数测试使用