//文件名:point.h,point類(lèi)的聲明
#ifndef POINT_H
#define POINT_H
#ifdef DLL_FILE
class _declspec(dllexport) point //導出類(lèi)point
#else
class _declspec(dllimport) point //導入類(lèi)point
#endif
{
public:
float y;
float x;
point();
point(float x_coordinate, float y_coordinate);
};
#endif
//文件名:point.cpp,point類(lèi)的實(shí)現
#ifndef DLL_FILE
#define DLL_FILE
#endif
#include "point.h"
//類(lèi)point的缺省構造函數
point::point()
{
x = 0.0;
y = 0.0;
}
//類(lèi)point的構造函數
point::point(float x_coordinate, float y_coordinate)
{
x = x_coordinate;
y = y_coordinate;
}
//文件名:circle.h,circle類(lèi)的聲明
#ifndef CIRCLE_H
#define CIRCLE_H
#include "point.h"
#ifdef DLL_FILE
class _declspec(dllexport)circle //導出類(lèi)circle
#else
class _declspec(dllimport)circle //導入類(lèi)circle
#endif
{
public:
void SetCentre(const point ¢rePoint);
void SetRadius(float r);
float GetGirth();
float GetArea();
circle();
private:
float radius;
point centre;
};
#endif
//文件名:circle.cpp,circle類(lèi)的實(shí)現
#ifndef DLL_FILE
#define DLL_FILE
#endif
#include "circle.h"
#define PI 3.1415926
//circle類(lèi)的構造函數
circle::circle()
{
centre = point(0, 0);
radius = 0;
}
//得到圓的面積
float circle::GetArea()
{
return PI *radius * radius;
}
//得到圓的周長(cháng)
float circle::GetGirth()
{
return 2 *PI * radius;
}
//設置圓心坐標
void circle::SetCentre(const point ¢rePoint)
{
centre = centrePoint;
}
//設置圓的半徑
void circle::SetRadius(float r)
{
radius = r;
}
類(lèi)的引用:
#include "..\circle.h" //包含類(lèi)聲明頭文件
#pragma comment(lib,"dllTest.lib");
int main(int argc, char *argv[])
{
circle c;
point p(2.0, 2.0);
c.SetCentre(p);
c.SetRadius(1.0);
printf("area:%f girth:%f", c.GetArea(), c.GetGirth());
return 0;
}
從上述源代碼可以看出,由于在DLL的類(lèi)實(shí)現代碼中定義了宏DLL_FILE,故在DLL的實(shí)現中所包含的類(lèi)聲明實(shí)際上為:
class _declspec(dllexport) point //導出類(lèi)point
{
…
}
和
class _declspec(dllexport) circle //導出類(lèi)circle
{
…
}
而在應用工程中沒(méi)有定義DLL_FILE,故其包含point.h和circle.h后引入的類(lèi)聲明為:
class _declspec(dllimport) point //導入類(lèi)point
{
…
}
和
class _declspec(dllimport) circle //導入類(lèi)circle
{
…
}
聯(lián)系客服