Create and use dynamic link library, static link library (C ++), dynamic link library static
Refer:
1. https://msdn.microsoft.com/zh-cn/library/ms235636.aspx Walkthrough: creating and using dynamic link libraries (C ++)
2. https://msdn.microsoft.com/zh-cn/library/ms235627.aspx Walkthrough: creating and using static libraries (C ++)
Abstract:
1. Create and use Dynamic Link Libraries
1 #ifdef MATHFUNCSDLL_EXPORTS 2 #define MATHFUNCSDLL_API __declspec(dllexport) 3 #else 4 #define MATHFUNCSDLL_API __declspec(dllimport) 5 #endif 6 7 namespace MathFuncs 8 { 9 // This class is exported from the MathFuncsDll.dll10 class MyMathFuncs11 {12 public:13 // Returns a + b14 static MATHFUNCSDLL_API double Add(double a, double b);15 16 // Returns a - b17 static MATHFUNCSDLL_API double Subtract(double a, double b);18 19 // Returns a * b20 static MATHFUNCSDLL_API double Multiply(double a, double b);21 22 // Returns a / b23 // Throws const std::invalid_argument& if b is 024 static MATHFUNCSDLL_API double Divide(double a, double b);25 };26 }
MathFuncsDll. h
1 // MathFuncsDll.cpp : Defines the exported functions for the DLL application. 2 // 3 4 #include "stdafx.h" 5 #include "MathFuncsDll.h" 6 #include <stdexcept> 7 using namespace std; 8 9 namespace MathFuncs10 {11 double MyMathFuncs::Add(double a, double b)12 {13 return a + b;14 }15 16 double MyMathFuncs::Subtract(double a, double b)17 {18 return a - b;19 }20 21 double MyMathFuncs::Multiply(double a, double b)22 {23 return a * b;24 }25 26 double MyMathFuncs::Divide(double a, double b)27 {28 if (b == 0)29 {30 throw invalid_argument("b cannot be zero!");31 }32 33 return a / b;34 }35 }
MathFuncsDll. cpp
By default, the "new project" template of DLL adds PROJECTNAME_EXPORTS to the defined symbols of the DLL project. The MATHFUNCSDLL_API symbol will be set in the member function declaration of this Code__declspec(dllexport)
Modifier. If other programs contain header files, MATHFUNCSDLL_API will define__declspec(dllimport)
Modifier.
"Add reference"The dialog box lists the databases that can be referenced."Project"The tab lists all projects in the current solution and all libraries they contain. In"Project"On the "MathFuncsDll" tab, select the check box next to "MathFuncsDll", and then select"OK"Button.
To reference the DLL header file, you must modify the directory path. To perform this operation, go"Property page"In the dialog box, expand"Configuration attributes"Nodes and"C/C ++"Node, and then select"Regular". In"Add include directory"Specify the path of the MathFuncsDll. h header file. You can use the relative path (for example, .. \ MathFuncsDll \), and then select"OK"Button.
Ii. Create and use a static library (C ++)
1 // MathFuncsLib.h 2 3 namespace MathFuncs 4 { 5 class MyMathFuncs 6 { 7 public: 8 // Returns a + b 9 static double Add(double a, double b);10 11 // Returns a - b12 static double Subtract(double a, double b);13 14 // Returns a * b15 static double Multiply(double a, double b);16 17 // Returns a / b18 static double Divide(double a, double b);19 };20 }
MathFuncsLib. h
1 // MathFuncsLib.cpp 2 // compile with: cl /c /EHsc MathFuncsLib.cpp 3 // post-build command: lib MathFuncsLib.obj 4 5 #include "MathFuncsLib.h" 6 7 #include <stdexcept> 8 9 using namespace std;10 11 namespace MathFuncs12 {13 double MyMathFuncs::Add(double a, double b)14 {15 return a + b;16 }17 18 double MyMathFuncs::Subtract(double a, double b)19 {20 return a - b;21 }22 23 double MyMathFuncs::Multiply(double a, double b)24 {25 return a * b;26 }27 28 double MyMathFuncs::Divide(double a, double b)29 {30 return a / b;31 }32 }
MathFuncsLib. cpp
Add reference and add directory paths consistent with Dynamic Link Library
Iii. Pre-compiled header files
Header file pre-compilation refers to some of the MFC standard header files used in a Project (such as Windows. h. Afxwin. h) pre-compilation. Later, this header file will not be compiled and only the pre-compilation results will be used. This will speed up compilation and save time. The precompiled header file is generated by compiling stdafx. cpp and named after the project name. Because the precompiled header file is suffixed with "pch", the compilation result file is projectname. pch. The compiler uses the pre-compiled header file through a header file stdafx. h. The stdafx. h header file name can be specified in the project compilation settings. The compiler considers that all commands in the # include "stdafx. h "the previous code is pre-compiled, and it skips # include" stdafx. h "command, using projectname. pch compiles all the code after this command. (During compilation, in # include "stdafx. h "the preceding statements are not compiled ). therefore, the first statement of all CPP implementation files is: # include "stdafx. h ".