调用类的动态连接库示例1

来源:互联网 发布:公安大数据应用案例 编辑:程序博客网 时间:2024/06/05 21:03

在test3工程下建立两个类point和circle类如下:

point类,声明可以被外面所调用

point.h

#ifndef POINT_H
#define POINT_H
#ifdef DLL_FILE
class _declspec(dllexport) point
#else
class _declspec(dllimport) point
#endif
{
public:
 float x;
 float y;
 point();
 point(float x_coordinate,float y_coordinate);
};
#endif


point.cpp

#ifndef DLL_FILE
#define DLL_FILE
#endif
#include "point.h"
point::point()
{
 x= 0.0;
 y= 0.0;
}
point::point(float x_coordinate,float y_coordinate)
{
 x = x_coordinate;
 y = y_coordinate;
}

 circle类

 circle.h

#ifndef CIRCLE_H
#define CIRCLE_H
#include "point.h"
#ifdef DLL_FILE

class _declspec(dllexport) circle
#else
class _declspec(dllimport) circle
#endif
{
public:
 void SetCentre(const point circlepoint);
 void SetRadius(float r);
 float GetGirth();
 float GetArea();
 circle();
private:
 float radius;
 point centre; //对象
};
#endif

 

circle.cpp

#ifndef DLL_FILE
#define DLL_FILE
#endif
#include "circle.h"
#define  PI 3.1415926
circle::circle()
{
 centre = point(0,0);
 radius = 0;
}
float circle::GetArea()
{
 return PI*radius*radius;
}
float circle::GetGirth()
{
 return 2*PI*radius;
}
void circle::SetCentre(const point circlepoint)
{
 centre= circlepoint;
}
void circle::SetRadius(float r)
{
 radius = r;
}

其中point和circle类在同一个工程下,circle可以使用point类的函数。这两个类都要声明成被外面所以用的类,其中circlr类直接会被调用函数所调用

编译后澡debug下会生成test3.dll和test.3lib文件

 

调用函数:

#include "D:\\gongzuo_test\\test3\\circle.h" //包含类声明头文件
#pragma comment (lib,"test3.lib");
#include <stdio.h>
int main()
{
 circle c;
 point p(2.0,2.0);
 c.SetCentre(p);
 c.SetRadius(1.0);
 printf("area:%f",c.GetArea(),c.GetGirth());
 return 0;
}

 

调用函数一定家加上ciecle类的头文件(全路径的),声明调用那个lib文件,注意:一定要把test3的lib文件和dll文件放到调用函数的目录下,否则报错。

原创粉丝点击