Walkthrough: Creating and Using a Dynamic Link Library (C++)
Original Link: http://msdn.microsoft.com/zh-cn/library/ms235636.aspx
Following content is only used for knowledge sharing. ^^
__________________________Have__A__Nice___Trip____________________________
his step-by-step walkthrough shows how to create a dynamic link library (DLL) for use with a C++ app. Using a library is a great way to reuse code. Rather than re-implementing the same routines in every program that you create, you write them one time and then reference them from apps that require the functionality. By putting code in the DLL, you save space in every app that references it, and you can update the DLL without recompiling all of the apps. For more information about DLLs, see DLLs in Visual C++.
This walkthrough covers these tasks:
Creating a DLL project.
Adding a class to the DLL.
Creating a console app that uses load-time dynamic linking to reference the DLL.
Using the functionality from the class in the app.
Running the app.
This walkthrough creates a DLL that can only be called from apps that use C++ calling conventions. For information about how to create DLLs for use with other languages, see Calling DLL Functions from Visual Basic Applications.
This topic assumes that you understand the fundamentals of the C++ language.
To create a dynamic link library (DLL) project
On the menu bar, choose File, New, Project.
In the left pane of the New Project dialog box, expand Installed, Templates, Visual C++, and then select Win32.
In the center pane, select Win32 Console Application.
Specify a name for the project—for example, MathFuncsDll—in the Name box. Specify a name for the solution—for example, DynamicLibrary—in the Solution name box. Choose the OK button.
On the Overview page of the Win32 Application Wizard dialog box, choose the Next button.
On the Application Settings page, under Application type, select DLL.
Choose the Finish button to create the project.
To add a class to the dynamic link library
To create a header file for a new class, on the menu bar, choose Project, Add New Item. In the Add New Item dialog box, in the left pane, under Visual C++, select Code. In the center pane, select Header File (.h). Specify a name for the header file—for example, MathFuncsDll.h—and then choose the Add button. A blank header file is displayed.
Add the following code to the beginning of the header file:
// MathFuncsDll.h #ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport)
#else
#define MATHFUNCSDLL_API __declspec(dllimport)
#endifAdd a basic class named MyMathFuncs to perform common mathematical operations such as addition, subtraction, multiplication, and division. The code should resemble this:
namespace MathFuncs
{
// This class is exported from the MathFuncsDll.dll
class MyMathFuncs
{
public:
// Returns a + b
static MATHFUNCSDLL_API double Add(double a, double b); // Returns a - b
static MATHFUNCSDLL_API double Subtract(double a, double b); // Returns a * b
static MATHFUNCSDLL_API double Multiply(double a, double b); // Returns a / b
// Throws const std::invalid_argument& if b is 0
static MATHFUNCSDLL_API double Divide(double a, double b);
};
}When the MATHFUNCSDLL_EXPORTS symbol is defined, the MATHFUNCSDLL_API symbol will set the __declspec(dllexport) modifier in the member function declarations in this code. This modifier enables the function to be exported by the DLL so that it can be used by other applications. When MATHFUNCSDLL_EXPORTS is undefined—for example, when the header file is included by an application—MATHFUNCSDLL_API defines the __declspec(dllimport) modifier in the member function declarations. This modifier optimizes the import of the function in an application. By default, the New Project template for a DLL adds PROJECTNAME_EXPORTS to the defined symbols for the DLL project. In this example, MATHFUNCSDLL_EXPORTS is defined when your MathFuncsDll project is built. For more information, see dllexport, dllimport.
NoteIf you are building the DLL project on the command line, use the /D compiler option to define the MATHFUNCSDLL_EXPORTS symbol.
In the MathFuncsDll project in Solution Explorer, in the Source Files folder, open MathFuncsDll.cpp.
Implement the functionality for MyMathFuncs in the source file. The code should resemble this:
// MathFuncsDll.cpp : Defines the exported functions for the DLL application.
// #include "stdafx.h"
#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 == )
{
throw invalid_argument("b cannot be zero!");
} return a / b;
}
}
Compile the dynamic link library by choosing Build, Build Solution on the menu bar.
Note |
|---|
|
If you are using an Express edition that does not display a Build menu, on the menu bar, choose Tools, Settings, Expert Settings to enable it, and then choose Build, Build Solution. |
| Note |
|---|
|
If you are building a project on the command line, use the /LD compiler option to specify that the output file is to be a DLL. For more information, see /MD, /MT, /LD (Use Run-Time Library). Use the /EHsc compiler option to enable C++ exception handling. For more information, see /EH (Exception Handling Model). |
To create an app that references the DLL
To create a C++ app that will reference and use the DLL that you just created, on the menu bar, choose File, New, Project.
In the left pane, under Visual C++, select Win32.
In the center pane, select Win32 Console Application.
Specify a name for the project—for example, MyExecRefsDll—in the Name box. Next to Solution, select Add to Solution from the drop-down list. This adds the new project to the same solution that contains the DLL. Choose the OK button.
On the Overview page of the Win32 Application Wizard dialog box, choose the Next button.
On the Application Settings page, under Application type, select Console application.
On the Application Settings page, under Additional options, clear the Precompiled header check box.
Choose the Finish button to create the project.
To use the functionality from the class library in the app
After you create a console app, an empty program is created for you. The name for the source file is the same as the name that you chose earlier. In this example, it is named MyExecRefsDll.cpp.
To use in the app the math routines that you created in the DLL, you must reference it. To do this, select the MyExecRefsDll project in Solution Explorer, and then on the menu bar, choose Project, References. In the Property Pages dialog box, expand the Common Properties node, select Framework and References, and then choose the Add New Reference button. For more information about the References dialog box, see Framework and References, Common Properties, <Projectname> Property Pages Dialog Box.
The Add Reference dialog box lists the libraries that you can reference. The Project tab lists the projects in the current solution and any libraries that they contain. On the Projects tab, select the check box next to MathFuncsDll, and then choose the OK button.
To reference the header files of the DLL, you must modify the included directories path. To do this, in the Property Pages dialog box, expand the Configuration Properties node, expand the C/C++ node, and then select General. Next toAdditional Include Directories, specify the path of the location of the MathFuncsDll.h header file. You can use a relative path—for example, ..\MathFuncsDll\—then choose the OK button.
You can now use the MyMathFuncs class in this application. Replace the contents of MyExecRefsDll.cpp with the following code:
// MyExecRefsDll.cpp
// compile with: /EHsc /link MathFuncsDll.lib #include <iostream> #include "MathFuncsDll.h" using namespace std; int main()
{
double a = 7.4;
int b = ; 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; try
{
cout << "a / 0 = " <<
MathFuncs::MyMathFuncs::Divide(a, ) << endl;
}
catch (const invalid_argument &e)
{
cout << "Caught exception: " << e.what() << endl;
} return ;
}Build the executable by choosing Build, Build Solution on the menu bar.
To run the application
Make sure that MyExecRefsDll is selected as the default project. In Solution Explorer, select MyExecRefsDll, and then on the menu bar, choose Project, Set As StartUp Project.
To run the project, on the menu bar, choose Debug, Start Without Debugging. The output should resemble this:
a + b = 106.4
a - b = -91.6
a * b = 732.6
a / b = 0.0747475
Caught exception: b cannot be zero!
Walkthrough: Creating and Using a Dynamic Link Library (C++)的更多相关文章
- Walkthrough: Create and use your own Dynamic Link Library (C++)
参考网站:https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-librar ...
- How to Use the Dynamic Link Library in C++ Linux (C++调用Delphi写的.so文件)
The Dynamic Link Library (DLL) is stored separately from the target application and shared among dif ...
- DYNAMIC LINK LIBRARY - DLL
https://www.tenouk.com/ModuleBB.html MODULE BB DYNAMIC LINK LIBRARY - DLL Part 1: STORY What do we h ...
- Custom Action : dynamic link library
工具:VS2010, Installshield 2008 实现功能: 创建一个C++ win32 DLL的工程,MSI 工程需要调用这个DLL,并将Basic MSI工程中的两个参数,传递给DLL, ...
- [DLL] Dynamic link library (dll) 的编写和使用教程
前一阵子,项目里需要导出一个DLL,但是导出之后输出一直不怎么对,改了半天才算改对...读了一些DLL教程,感觉之后要把现在的代码导出,应该还要花不少功夫...下面教程参照我读的3个教程写成,所以内容 ...
- 动态链接库(Dynamic Link Library)
DLL INTRODUCTION A DLL is a library that contains code and data that can be used by more than one pr ...
- 动态链接库(Dynamic Link Library)学习笔记(附PE文件分析)
转载:http://www.cnblogs.com/yxin1322/archive/2008/03/08/donamiclinklibrary.html 作者:EricYou 转载请注明出处 注 ...
- How to Create DLL(Dynamic link library)
该文章属于在YouTube视频上看到的,链接如下: https://www.youtube.com/watch?v=EmDJsl7C9-k&t=3s 1.创建一个工程并建立一个控制台程序 2. ...
- Linux Dynamic Shared Library && LD Linker
目录 . 动态链接的意义 . 地址无关代码: PIC . 延迟版定(PLT Procedure Linkage Table) . 动态链接相关结构 . 动态链接的步骤和实现 . Linux动态链接器实 ...
随机推荐
- 如何创建一个有System用户权限的命令行
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何创建一个有System用户权限的命令行.
- Css基础-类选择器
类选择器以一个.显示 <p class="pclass">这是第一个class</p> .pclass { color:red; } <div cla ...
- 使用hexdump 查看二进制文件
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- Lotus分析
一 Lotus的任务 Lotus是一个消息通知服务,topic和subscription是多对多的关系.后面我加了一个发送自定义邮件和自定义短信的功能. 产品里面有个监控报警和通知列表.监控报警里创建 ...
- Process学习
主要系统总结下我对进程的认识,以前理解得不够全面不够深入.本文肯定还不够好,当有新的认识新的理解后还会随时来更新.读完本文,下面几个问题便可理解清楚. 1.进程是什么? 2.为什么要有进程这个概念? ...
- tcp_tw_recycle和tcp_timestamps的文章汇总
临近年关,人会变得浮躁,期间写的代码可谓乱七八糟.不过出来混始终是要还的,这不最近就发现一个PHP脚本时常连不上服务器. 遇到这类问题,我习惯于先用strace命令跟踪了一下看看: shell ...
- 面试题总结之Linux/Shell
Linux Linux cshrc文件作用 Linux如何起进程/查看进程/杀进程 Linux 文件755 代表什么权限 Linux辅助线程 Linux进程间通信方法 pipeline,msgq... ...
- Vmware中为Mac Os安装vmtools
成功方法: 1. 在VMWare中点击edit this virtual machine 2. 添加CD/DVD,使用iso,找到那个darwin.iso 3. 在setting里面,点击CD/DVD ...
- Debug 之 VS2010网站生成成功,但是发布失败
用vs做好了网站.清理解决方案和重新生成解决方案都可以.但是发布不能成功.发布不能成功,有错误还好,郁闷的是竟然没有错误提示. 解决方法: 1.发布文件夹权限问题.重新找个地方建立一个发布文件夹即可. ...
- Python 基础【第五篇】元组和列表
一 .Python之列表: 其实所谓的列表我个人感觉和shell 中的数组是一样的(只是个人见解哦),列表其实说白了就是元素的组合: 格式: Name = [a,b,c,d] 下标: 每一个列表中的元 ...