您的位置:首页 > 其它

导出函数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,测试正确
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: