接着前面一篇,【VS2010学习笔记】【编程实例】(在Visual Studio中使用C++创建和使用DLL),前面一篇对于函数类的动态链接库的封装已经写的相当详细了,而且所讲的内容比较实用,之前查的一些其他的DLL封装的说明,大多需要设置包含目录之类的,但是最终也没有成形。
在上篇的最后也介绍含有类的DLL的封装,但是缺少对DLL中类的调用的说明,这里主要想补充一下,新建DLL工程,设置为不是空项目,命名为ExportClassFromDllDemo:
添加头文件ExportClassFromDllDemo.h,添加代码:
#ifndef _EXPORTVARFROMDLLDEMO_H_
#define _EXPORTVARFROMDLLDEMO_H_
#ifdef __cplusplus
extern "C" {
#endif
#ifdef EXPORTCLASSFROMDLLDEMO_EXPORTS
#define EXPORTCLASSFROMDLLDEMO_API _declspec(dllexport)
#else
#define EXPORTCLASSFROMDLLDEMO_API _declspec(dllimport)
#endif
class EXPORTCLASSFROMDLLDEMO_API CTestClass
{
public:
static int Add(int a, int b);
void SetA(int a);
int GetA();
private:
int m_a;
};
#ifdef __cplusplus
}
#endif
#endif
往生成的ExportClassFromDllDemo.cpp文件中添加如下代码:
// ExportClassFromDllDemo.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "ExportClassFromDllDemo.h"
int CTestClass::Add(int a, int b)
{
return (a + b);
}
void CTestClass::SetA(int a)
{
m_a = a;
}
int CTestClass::GetA()
{
return m_a;
}
点击编译即可生成相应的DLL。(工程下载)
含有类的DLL的调用:
调用的方式加载时动态链接的方式一样,需要包含生成DLL的头文件和导入库文件,需要将头文件和Debug文件拷贝到新的工程目录下,应该可以通过修改路径的方式添加,看到别人有这样做的。但是之前测试出问题,这种方式没有问题就采用了,调用的主程序代码如下:
// DllClassTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "ExportClassFromDllDemo.h" //这里要包含生成DLL的头文件
#pragma comment(lib,"..\\Debug\\ExportClassFromDllDemo.lib") //这里要导入生成的库文件
int _tmain(int argc, _TCHAR* argv[])
{
CTestClass ad;
printf("sum=%d",ad.Add(2,3));
while(1);
return 0;
}
运行结果为:
参考: 果冻想:在Visual Studio中使用C++创建和使用DLL