VC DLL 动态链接库(四)

  DLL 导出类

  DLL 中定义的类可以在应用工程中使用。

  接下来,我将演示在 DLL 中定义 point 和 circle 两个类, 并在应用工程中引用了他们。

// point.h point 类的声明
#ifnedf POINT_H
#define POINT_H
#ifdef DLL_FILE
class _declspec(dllexport) point // 导出类 point
#else
class _declspec(dllimport) point // 导入类 point
#endif
{
public:
    float x, y;
    point();
    point(folat x_coordinate, folat y_coordinate);
};
#endif
// point.cpp point 类的实现
#ifnedf DLL_FILE
#define DLL_FILE
#endif

#include "point.h"
// 类 point 的缺省构造函数
point::point(){
    x = 0.0, y = 0.0;
}

// 类 point 的构造函数
point::point(float x_coordinate, float y_coordinate){
    x = x_coordinate;
    y = y_coordinate;
}
// circle.h circle 类的声明
#ifndef CIRCLE_H
#define CIRCLE_H
#include "point.h"
#idnef DLL_FILE
class _declspec(dllexport)circle // 导出类 circle
#else
class _declspec(dllimport)circle // 导入类 circle
#endif
{
public:
    void SetCentre(const point centrePoint);
    void SetRadius(float r);
    float GetGirth();
    float GetArea();
    circle();
private:
    float radius;
    point centre;
};
#endif;
// circle.cpp, circle类的实现
#ifndef DLL_FILE
#define DLL_FILE
#endif
#include "circle.h"
#define PI 3.1415926
// circle 类的构造函数
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 centrePoint)
{
    centre = centrePoint;
}
// 设置圆的半径
void circle::SetRadius(float r)
{
    radius = r;
}
// test.cpp 类的引用
#include "..\\circle.h"
#pragma comment(lib, "dllTest.lib");

int main()
{
    circle c;
    point p(2.0, 2.0);
    c.SetCentre(p);
    c.SetRadius(1.0);
    cout << "area:" << c.GetArea() << "girth" << c.GetGirth() << endl;
    return 0;
}

  

通过 DLL 中的

class _declspec(dllexport) point // 导出类 point

class _declspec(dllimport) point // 导入类 point

来完成类的导入和导出。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 03:22:52

VC DLL 动态链接库(四)的相关文章

VC DLL 动态链接库(一)

首先我们来说说静态链接库 静态数据库是指 lib 单独使用, 在编译时直接加入程序当中, 包含函数本身, 不仅包含头文件,还有源码, 称为静态链接库static link library.链接生成的程序可以独立运行. 即lib文件是静态编译出来的,索引和实现都在其中. 缺点是任何改动,都需要重新编译.链接,这个对大型的程序非常不便,升级也麻烦.有时,在更改数据结构时,需要重新编译整个工程,而非只编译.链接单个lib. 实现方法: 在 VC new 一个名称为 libTest 的 static l

VB调用VC dll的返回方式

第一种类型:数值传递 注意:在VB中,默认变量传递方式为ByRef为地址,而传递值就是用ByVal,还要注意在C++中,int类型的变量是32位的,在VB中要用long型变量来配合.VC++部分: [cpp] view plaincopy extern "C" _declspec(dllexport) int __stdcall TestCalc(int source) { //AFX_MANAGE_STATE(AfxGetStaticModuleState()); return(++

C# DumpBin使用 查看反射C++ dll 动态链接库中的函数

DumpBin是Microsoft提供的一个用于查看.exe..dll文件信息的工具,其位于: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin, 但直接运行这个程序会有错误,其环境配置有问题,所以要先启动cmd,然后运行C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat,此批处理会给这个cmd窗口设置环境变量,不要关闭这个cmd,在同一

Python调用DLL动态链接库——ctypes使用

最近要使用python调用C++编译生成的DLL动态链接库,因此学习了一下ctypes库的基本使用. ctypes是一个用于Python的外部函数库,它提供C兼容的数据类型,并允许在DLL或共享库中调用函数. 一.Python调用DLL里面的导出函数 1.VS生成dll 1.1 新建动态链接库项目 1.2 在myTest.cpp中输入以下内容: // myTest.cpp : 定义 DLL 应用程序的导出函数. // #include "stdafx.h" #define DLLEXP

无法加载 DLL“rasapi32.dll”: 动态链接库(DLL)初始化例程失败。的处理备注方案

网站提示   无法加载 DLL"rasapi32.dll": 动态链接库(DLL)初始化例程失败. (异常来自 HRESULT:0x8007045A). <system.net><defaultProxy><proxy usesystemdefault="false" /></defaultProxy></system.net> 初步怀疑是因为做了云加速服务造成的代理问题,自己瞎猜!反正应该管用

vc dll的生成和使用

这两天做了打印机的上位机驱动,要生成DLL,了解了这方面的东东,记录下简单. 因为要在wince平台上使用,接口不能用MFC类,所以费劲的转换成了非MFC,也就使用Non-MFC Dlls DLL的生成: *.h #ifndef __PRINTERCONTROL_H__ #define __PRINTERCONTROL_H__ int __declspec(dllexport)PrintDC(void *p); #endif 因为要静态调用需要*.lib 所以还要生成.def文件,直接创建即可,

在DLL动态链接库中封装VCL的MDI子窗体

在DLL动态链接库中封装VCL的MDI子窗体不多说了,看代码就应该明白了,曾经我遇到的问题,现在放出来大家共享! 这里是工程文件的部分: 在DLL中封装MDI子窗体需要重写DLL入口函数,具体代码如下: var DllApp: TApplication;//定义保存原DLL的TApplication对象 DllScr: TScreen;//定义保存原DLL的TScreen对象 procedure UnProcDll(Reason: Integer); register;//重新定义DLL入口函数

.h头文件、 .lib库文件、 .dll动态链接库文件之间的关系(转)

h头文件作用:声明函数接口 dll动态链接库作用:含有函数的可执行代码 lib库有两种: (1)静态链接库(Static Libary,以下简称“静态库”) (2)动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”) 两者的区别: 实质是不一样的东西. 静态库本身就包含了实际执行代码.符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息. 如:当我们在自己的程序中引用了一个h头

VC++ DLL 发布到生产环境过程

最近项目中用到了VC++ DLL,在本机调试时无任何问题,但是发布出来后,COPY到另外的机器就报错,说找不到DLL,由于自身工作接触这方面比较少,经过一番折腾后,终于解决,以下为解决步骤 一,平台工具集(最终没选这个发布后也可以运行,选的VS 2015(V140),但是C++相关的工具是必须要装的),就选了Visual Studio 2015 - Windows XP (v140_xp),如图 接下来生成项目报错,C:\Program Files (x86)\MSBuild\Microsoft