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;

 

posted @ 2012-11-04 00:56  全绍辉  阅读(278)  评论(0编辑  收藏  举报