动态链接库的创建和使用
2016-02-14 14:06
429 查看
一、创建新的动态链接库(DLL)项目
从“File”菜单中,选择“New”,然后选择“Project…”。
如下图:
在“项目类型”窗格中,选择“Visual C++”下的“Win32”。
在“模板”窗格中,选择“Win32 Console Application”。
为项目选择一个名称,如 MathFuncsDll,并将其键入“Name:”字段。 为解决方案选择一个名称,如 DynamicLibrary,并将其键入“Solution Name:”字段。
如下图:
二、向动态链接库添加类
若要为新类创建头文件,请从“项目”菜单中选择“添加新项…”。 将显示“添加新项”对话框。 在“类别”窗格中,选择“Visual C++”下的“代码”。 在“模板”窗格中选择“头文件(.h)”。 为头文件选择一个名称,如 MathFuncsDll.h,并单击“添加”。
将显示一个空白文件。
添加一个名为“MyMathFuncs”的简单类,以执行常见的算术运算,如加、减、乘和除。 代码应与以下内容类似:
请注意此代码方法声明中的 __declspec(dllexport) 修饰符。 这些修饰符使 DLL 能够导出该方法以供其他应用程序使用(Windows与Linux所不同的地方!!!!!!!)。
在源文件中实现“MyMathFuncs”的功能。 代码应与以下内容类似:
若要将项目生成为 DLL,请从“项目”菜单中选择 MathFuncsDll“属性…”。 在左窗格中,选择“配置属性”下的“常规”。 在右窗格中,将“配置类型”更改为“动态库(.dll)”。 单击“确定”保存更改。
编译该动态链接库,方法是选择“生成”菜单中的“生成解决方案”。 这样就创建了一个可供其他程序使用的 DLL。 如图:
生成的dll文件的地址:
三、创建引用动态链接库的应用程序
若要创建将引用并使用刚创建的动态链接库的应用程序,请从“File”菜单中选择“New”,然后选择“Project…”。
在“项目类型”窗格中,选择“Visual C++”下的“Win32”。
在“模板”窗格中,选择“Win32 Console Application”。
为项目选择一个名称(如 MyExecRefsDll),并将其键入“名称”字段。 从“解决方案”旁边的下拉列表中选择“Add to Solution”。 这会将新项目添加到该动态链接库所属的同一个解决方案中。
如图:
四、在控制台应用程序中使用类库的功能
(这些路径只告诉编译器怎么找文件,没有说把那里面的文件加入工程.)
(若不设置,编译报错:无法打开***文件,或者在调用处#include<...dll头文件相对路径...>)
2.Project->properties->c/c++->general->additional include directories 添加包含文件
(若采用在调用处#include<...dll头文件相对路径...>的方法则不用设置)
Project->properties->linker->general->additional library directories 添加库文件
Project->properties->linker->input->additional additional dependencies添加用到的lib
(编译生成.dll的同时必然也有一个.lib;这一步也可以在代码中显示调用 #pragma comment(lib, "***.lib") )
(若不添加,连接报错:无法解析的外部符号)
3.将dll文件拷贝到工程debug文件下(如果不拷贝,编译链接不报错,运行报错:无法找到***.dll)切记第三条,让我排查了一上午,当然最好把所有输出目录定位到一个文件下面。
现在,可以在应用程序中使用“MyMathFuncs”类了。 使用以下代码替换“MyExecRefsDll.cpp”的内容:
从“File”菜单中,选择“New”,然后选择“Project…”。
如下图:
在“项目类型”窗格中,选择“Visual C++”下的“Win32”。
在“模板”窗格中,选择“Win32 Console Application”。
为项目选择一个名称,如 MathFuncsDll,并将其键入“Name:”字段。 为解决方案选择一个名称,如 DynamicLibrary,并将其键入“Solution Name:”字段。
如下图:
二、向动态链接库添加类
若要为新类创建头文件,请从“项目”菜单中选择“添加新项…”。 将显示“添加新项”对话框。 在“类别”窗格中,选择“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); }; }
请注意此代码方法声明中的 __declspec(dllexport) 修饰符。 这些修饰符使 DLL 能够导出该方法以供其他应用程序使用(Windows与Linux所不同的地方!!!!!!!)。
在源文件中实现“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; } }
若要将项目生成为 DLL,请从“项目”菜单中选择 MathFuncsDll“属性…”。 在左窗格中,选择“配置属性”下的“常规”。 在右窗格中,将“配置类型”更改为“动态库(.dll)”。 单击“确定”保存更改。
编译该动态链接库,方法是选择“生成”菜单中的“生成解决方案”。 这样就创建了一个可供其他程序使用的 DLL。 如图:
生成的dll文件的地址:
三、创建引用动态链接库的应用程序
若要创建将引用并使用刚创建的动态链接库的应用程序,请从“File”菜单中选择“New”,然后选择“Project…”。
在“项目类型”窗格中,选择“Visual C++”下的“Win32”。
在“模板”窗格中,选择“Win32 Console Application”。
为项目选择一个名称(如 MyExecRefsDll),并将其键入“名称”字段。 从“解决方案”旁边的下拉列表中选择“Add to Solution”。 这会将新项目添加到该动态链接库所属的同一个解决方案中。
如图:
四、在控制台应用程序中使用类库的功能
如何在编译器(vs2008)里设置调用别人写好的lib和dll
步骤:1.Tools->options->projects and solutions->VC++ directories分别在包含文件,库文件填加了路径(这些路径只告诉编译器怎么找文件,没有说把那里面的文件加入工程.)
(若不设置,编译报错:无法打开***文件,或者在调用处#include<...dll头文件相对路径...>)
2.Project->properties->c/c++->general->additional include directories 添加包含文件
(若采用在调用处#include<...dll头文件相对路径...>的方法则不用设置)
Project->properties->linker->general->additional library directories 添加库文件
Project->properties->linker->input->additional additional dependencies添加用到的lib
(编译生成.dll的同时必然也有一个.lib;这一步也可以在代码中显示调用 #pragma comment(lib, "***.lib") )
(若不添加,连接报错:无法解析的外部符号)
3.将dll文件拷贝到工程debug文件下(如果不拷贝,编译链接不报错,运行报错:无法找到***.dll)切记第三条,让我排查了一上午,当然最好把所有输出目录定位到一个文件下面。
现在,可以在应用程序中使用“MyMathFuncs”类了。 使用以下代码替换“MyExecRefsDll.cpp”的内容:
// MyExecRefsDll.cpp // compile with: /EHsc /link MathFuncsDll.lib #include <iostream> #include "MathFuncsDll.h" using namespace std; int main() { double a = 7.4; int b = 99; cout << "a + b = " << MathFuncs::MyMathFuncs::Add(a, b) << endl; cout << "a - b = " << MathFuncs::MyMathFuncs::Subtract(a, b) << endl; cout << "a * b = " << MathFuncs::MyMathFuncs::Multiply(a, b) << endl; cout << "a / b = " << MathFuncs::MyMathFuncs::Divide(a, b) << endl; return 0; }
相关文章推荐
- FREEBASIC 编译可被python调用的dll函数示例
- DLL(Dynamic Linkable Library) 详解说明
- delphi中一个值得大家来考虑的DLL问题
- 将ocx文件转换成C#程序引用的DLL文件的办法
- C++与C#互调dll的实现步骤
- C++调用C#的DLL实现方法
- 自己写的文件操作的function和Sub vb.net dll
- C# 调用C++写的dll的实现方法
- 使用 JScript 创建 .exe 或 .dll 文件的方法
- 深入解析JVM对dll文件和对类的装载过程
- c#中xml文档注释编译dll引用到其它项目示例
- .dll 文件反编译的工具软件集合
- C#调用C++版本dll时的类型转换需要注意的问题小结
- java使用JNA(Java Native Access)调用dll的方法
- Python 调用DLL操作抄表机
- C#调用Matlab生成的dll方法的详细说明
- C#将dll打包到程序中的具体实现
- VC程序在Win32环境下动态链接库(DLL)编程原理
- Lua5.1中加载dll动态链接库的方法