创建dll;
// "MyDll.h"
#include <stdio.h>
#include <stdlib.h>
#include "Public.h"
#define DLL_EXPORT __declspec(dllexport)
class DLL_EXPORT SimpleDLLClass
{
public:
SimpleDLLClass();
virtual ~SimpleDLLClass();
virtual int getValue() { return m_nValue;};
private:
int m_nValue;
};
//MyDll.cpp
#include "MyDll.h"
SimpleDLLClass::SimpleDLLClass()
{
m_nValue = 9;
}
SimpleDLLClass::~SimpleDLLClass()
{
}
编译生成MyDll.lib和MyDll.dll
1. 静态调用
#include <stdio.h>
#include <stdlib.h>
#include "Public.h"
#define DLL_EXPORT __declspec(dllexport) //调用头文件
class DLL_EXPORT SimpleDLLClass
{
public:
SimpleDLLClass();
virtual ~SimpleDLLClass();
virtual int getValue() { return m_nValue;};
private:
int m_nValue;
};
包含MyDll.h 头文件,对类进行声明定义。
然后就可以当使用本地类使用。
int _tmain(int argc, _TCHAR* argv[])
{
SimpleDLLClass spCls;
wcout<<spCls.getValue()<<endl;
}
若 在"MyDll.h"中,将类的成员变量int m_nValue; 修改成static。 再用1. 静态调用方法就会找不到m_nValue;原因(原因:静态变量m_nValue已被DLL导出,但SimpleDLLClass无法访问m_nValue)
将调用头文件 #define DLL_EXPORT __declspec(dllexport)修改成 :
#define DLL_EXPORT __declspec(dllimport) 解决。
dllimport是为了更好的处理类中的静态成员变量(或者其他...)的,如果没有静态成员变量(或者其他...),那么这个__declspec(dllimport)无所谓.
动态加载(待补充)....