DLL基本开发规则
1、显示调用DLL方式:
typedef float (*MyCalculate)(float,float,int); //宏定义floatcalculate函数指针类型
HINSTANCE hdll; //DLL的句柄
MyCalculate calfunc;//函数指针
hdll=LoadLibrary("..\\debug\\FloatCalDLL.dll"); //LoadLibrary函数装载DLL
if(hdll!=NULL)
{
//GetProcAddress函数获得calculate函数地址
calfunc=(MyCalculate)GetProcAddress(hdll,"floatcalculate");//floatcalculate函数名
}
else
{
AfxMessageBox("无法加载DLL");
return;
}
UpdateData(true);
m_floResult=calfunc(m_floNum1,m_floNum2,m_radio);
2、隐式调用DLL方式:
A1#include "calculate.h"
#pragma comment(lib,"FloatCalDLL.lib") //通知编译器DLL的.lib文件所在的路径及文件名
A2extern"C" _declspec(dllimport) float floatcalculate(float x,float y,int type);//声明导入函数
A1,A2至少要有一个
floatcalculate(10,10,10);
3、导出全局变量:
ExternVal.cpp
char* myVar;
ExternValDll.def
;在DLL中导出变量
LIBRARY "ExternVarDll"
DESCRIPTION "实现一个导出变量的DLL"
EXPORTS
myVar DATA
4、导入全局变量:
HINSTANCE hdll; //DLL的句柄
hdll=LoadLibrary("..\\debug\\ExternVarDll.dll"); //LoadLibrary函数装载DLL
if(hdll!=NULL)
{
//GetProcAddress函数获得dllVar变量的地址
m_strVar=*(char**)GetProcAddress(hdll,"myVar"); //获取全局变量
UpdateData(FALSE);
FreeLibrary(hdll); //释放DLL
}
else
{
AfxMessageBox("无法加载DLL!");
return;
}
5、导出类:
AreaVolumnClass.h
class _declspec(dllexport) AreaVolumnClass //声明导出类
{
public:
AreaVolumnClass();
virtual ~AreaVolumnClass();
double GetArea(); //计算长方体的表面积
double GetVolumn(); //计算长方体的体积
void SetLenth(double a); //设置长方体的长
void SetWidth(double b); //设置长方体的宽
void SetHeight(double c); //设置长方体的高
private:
double lenth; //存储长方体的长
double width; //存储长方体的宽
double height; //存储长方体的高
};
6、导入类:
#include "AreaVolumnClass.h" //包含头文件,类在其中声明了
#pragma comment(lib,"ExportClassDll.lib") //隐式导入DLL
AreaVolumnClass myclass;