VC++ 程序 如何封装为dll文件

VC++ 程序 如何封装为dll文件,第1张

创建新的动态链接库 (DLL) 项目

从 “文件”菜单中,选择 “新建”,然后选择 “项目…”。

在 “项目类型”窗格中,选择 “Visual C++”下的 “Win32”。

在 “模板”窗格中,选择 “Win32 控制台应用程序”。

为项目选择一个名称,如

MathFuncsDll,并将其键入 “名称”字段。 为解决方案选择一个名称,如

DynamicLibrary,并将其键入 “解决方案名称”字段。

单击 “确定”启动 Win32 应用程序向导。

在 “Win32 应用程序向导”对话框的 “概述”页中,单击 “下一步”。

在 “Win32 应用程序向导”中的 “应用程序设置”页中,选择 “应用程序类型”下的 “DLL”(如果可用),或者选择 “控制台应用程序”(如果 “DLL”不可用)。 某些版本的 Visual Studio

不支持通过使用向导创建 DLL 项目。您可以稍后对此进行更改,以将项目编译为

DLL。

在 “Win32 应用程序向导”的 “应用程序设置”页中,选择 “附加选项”下的 “空项目”。

单击 “完成”创建项目。

向动态链接库添加类

若要为新类创建头文件,请从 “项目”菜单中选择 “添加新项…”。

将显示 “添加新项”对话框。

在 “类别”窗格中,选择 “Visual C++”下的 “代码”。 在 “模板”窗格中选择 “头文件(.h)”。 为头文件选择一个名称,如

MathFuncsDll.h,并单击 “添加”。 将显示一个空白文件。

添加一个名为“MyMathFuncs”的简单类,以执行常见的算术运算,如加、减、乘和除。代码应与以下内容类似:

以带有颜色区分的格式查看复制到剪贴板打印

// MathFuncsDll.h

namespace MathFuncs

{

class MyMathFuncs

{

public:

// Returns a + b

static __declspec(dllexport) double Add(double a, double b)

// Returns a - b

static __declspec(dllexport) double Subtract(double a, double b)

// Returns a * b

static __declspec(dllexport) double Multiply(double a, double b)

// Returns a / b

// Throws DivideByZeroException if b is 0

static __declspec(dllexport) double Divide(double a, double b)

}

}

// MathFuncsDll.h

namespace MathFuncs

{

class MyMathFuncs

{

public:

// Returns a + b

static __declspec(dllexport) double Add(double a, double b)

// Returns a - b

static __declspec(dllexport) double Subtract(double a, double b)

// Returns a * b

static __declspec(dllexport) double Multiply(double a, double b)

// Returns a / b

// Throws DivideByZeroException if b is 0

static __declspec(dllexport) double Divide(double a, double b)

}

}

请注意此代码方法声明中的 __declspec(dllexport) 修饰符。 这些修饰符使 DLL

能够导出该方法以供其他应用程序使用。有关更多信息,请参见 dllexport, dllimport。

若要为新类创建源文件,请从 “项目”菜单中选择 “添加新项…”。

将显示 “添加新项”对话框。

在 “类别”窗格中,选择 “Visual C++”下的 “代码”。 在 “模板”窗格中,选择 “C++ 文件(.cpp)”。 为源文件选择一个名称,如

MathFuncsDll.cpp,并单击 “添加”。 将显示一个空白文件。

在源文件中实现“MyMathFuncs”的功能。代码应与以下内容类似:

以带有颜色区分的格式查看复制到剪贴板打印

// MathFuncsDll.cpp

// compile with: /EHsc /LD

#include "MathFuncsDll.h"

#include <stdexcept>

using namespace std

namespace MathFuncs

{

double MyMathFuncs::Add(double a, double b)

{

return a + b

}

double MyMathFuncs::Subtract(double a, double b)

{

return a - b

}

double MyMathFuncs::Multiply(double a, double b)

{

return a * b

}

double MyMathFuncs::Divide(double a, double b)

{

if (b == 0)

{

throw new invalid_argument("b cannot be zero!")

}

return a / b

}

}

// MathFuncsDll.cpp

// compile with: /EHsc /LD

#include "MathFuncsDll.h"

#include <stdexcept>

using namespace std

namespace MathFuncs

{

double MyMathFuncs::Add(double a, double b)

{

return a + b

}

double MyMathFuncs::Subtract(double a, double b)

{

return a - b

}

double MyMathFuncs::Multiply(double a, double b)

{

return a * b

}

double MyMathFuncs::Divide(double a, double b)

{

if (b == 0)

{

throw new invalid_argument("b cannot be zero!")

}

return a / b

}

}

若要将项目生成为 DLL,请从

“项目”菜单中选择

MathFuncsDll “属性...”。 在左窗格中,选择 “配置属性”下的 “常规”。

在右窗格中,将 “配置类型”更改为 “动态库(.dll)”。

单击 “确定”保存更改。

说明

如果您从命令行生成项目,请使用

/LD 编译器选项指定输出文件应为 DLL。

有关更多信息,请参见 /MD、/MT、/LD(使用运行库)。

编译该动态链接库,方法是选择

“生成”菜单中的 “生成解决方案”。

这样就创建了一个可供其他程序使用的

DLL。

封装 (encapsulation)

对象隐藏其内部数据和方法的能力,使得只有对象的预期部分以编程方式可访问。

封装 (encapsulation)

封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与 *** 作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过 外部接口,一特定的访问权限来使用类的成员。

例如,在抽象的基础上,我们可以将时钟的数据和功能封装起来,构成一个时钟类。

按c++的语法,时钟类的声明如下:

class Clock

{

public://共有成员,外部借口

void SetTime(int NewH,int NewM,int NewS)

void ShowTime()

private: //私有成员,外部无法访问

int Hour,Minute,Second

}

可以看到通过封装使一部分成员充当类与外部的接口,而将其他的成员隐蔽起来,这样就达到了对成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。

封装,就是指把硅片上的电路管脚,用导线接引到外部接头处,以便与其它器件连接.封装形式是指安装半导体集成电路芯片用的外壳。它不仅起着安装、固定、密封、保护芯片及增强电热性能等方面的作用,而且还通过芯片上的接点用导线连接到封装外壳的引脚上,这些引脚又通过印刷电路板上的导线与其他器件相连接,从而实现内部芯片与外部电路的连接。因为芯片必须与外界隔离,以防止空气中的杂质对芯片电路的腐蚀而造成电气性能下降。另一方面,封装后的芯片也更便于安装和运输。由于封装技术的好坏还直接影响到芯片自身性能的发挥和与之连接的PCB(印制电路板)的设计和制造,因此它是至关重要的。

衡量一个芯片封装技术先进与否的重要指标是芯片面积与封装面积之比,这个比值越接近1越好。封装时主要考虑的因素:

1、 芯片面积与封装面积之比为提高封装效率,尽量接近1:1;

2、 引脚要尽量短以减少延迟,引脚间的距离尽量远,以保证互不干扰,提高性能;

3、 基于散热的要求,封装越薄越好。

封装主要分为DIP双列直插和SMD贴片封装两种。从结构方面,封装经历了最早期的晶体管TO(如TO-89、TO92)封装发展到了双列直插封装,随后由PHILIP公司开发出了SOP小外型封装,以后逐渐派生出SOJ(J型引脚小外形封装)、TSOP(薄小外形封装)、VSOP(甚小外形封装)、SSOP(缩小型SOP)、TSSOP(薄的缩小型SOP)及SOT(小外形晶体管)、SOIC(小外形集成电路)等。从材料介质方面,包括金属、陶瓷、塑料、塑料,目前很多高强度工作条件需求的电路如军工和宇航级别仍有大量的金属封装。

封装大致经过了如下发展进程:

结构方面:TO->DIP->PLCC->QFP->BGA ->CSP;

材料方面:金属、陶瓷->陶瓷、塑料->塑料;

引脚形状:长引线直插->短引线或无引线贴装->球状凸点;

装配方式:通孔插装->表面组装->直接安装

你没有说是什么类型的dll,那么姑且就答一下咯。

首先呢,用VC++新建一个Win32 Dynamic-Link Library类型的工程,工程名就命名为fan吧。,并在AppWinzard的第一步选择“An empty dll project”选项,也就是创建一个空的动态链接库工程。然后,为该工程添加一个C++源文件(C源文件添加不了,因为没有C空文件的选项,不过我相信你可以把C代码改写成C++代码,要不然的话就无语了。。。):fan.c,并在其中编写完成一个你的函数,比如我是完成一个加法运算函数和减法运算函数。结果代码如下:

int add(int a, int b)

{

reutnr a+b

}

int subtract(int a, int b)

{

return a - b

}

完成后用Bulid命令生成一个fan这个动态链接库程序了,然后在该工程的debug下你可以发现fan.dll的了。

有问题再给我message吧。。。

LS的是不是乱copy的呀,怎么无端端有一个kfc的...可笑。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7970089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存