Where are these functions? This is the secret we need to know.
2. Composition of MFC
- Mfc42d. dll
- Msvcrtd. dll
- Mfco42d. dll
Uncover the mystery: MFC consists of four parts. This statement may be inaccurate. It should be said that the core underlying API of VC is composed of the following parts:
- CRT (C Runtime): The underlying Microsoft implementation version of the C and C ++ standard libraries. The interfaces refer to the standard specifications. MFC depends on this. However, the Windows API does not depend on this and has its own internal implementation version.
- Windows API: It depends on how Microsoft's operating system gets it. It is provided in the form of c api.
- MFC: encapsulate windows APIs. It basically covers some CRT and all windows APIs. The Group is afx.
- ATL: The encapsulation of Microsoft's complete entry into the Component solution. The Group is a Com group.
See the following table:
In fact, look at the VC directory structure and probably know its group.MFC static library and dynamic library
The most popular is the use of MFC as a DLL, and also as a DLL. In this case, if you dig deep, the most likely thing to find is the mfc dll.
By referring to "naming conventions for MFC DLLs" in msdn, we can find that the dynamic link library-based MFC naming convention is: MFC [d | o | n] X [u] [D]. DLL.
The main attributes are: function module (core | Ole | dB | net), version (vc6 corresponds to 42, vs2003 corresponds to 70, vs2005 corresponds to 80, vs2008 corresponds to 90 ), whether it is Unicode or ANSI, whether it is release or debug.
Note that in the debug version, each function module corresponds to a Lib, but in the release version, it is combined into a unified lib file mfc42.lib.
In fact, there is still a static Link Library. However, its name may not be correct: [n | u] afxdw [D]. Lib
Including Unicode and non-Unicode, debug and release are differentiated.CRT static library and dynamic library
Refer to "info: What are the C/C ++ libraries my program wocould link with?" In msdn ?".
When we call such functions as sprintf and wcslen, we rely on this library.
This can be set through compilation:
In fact, the corresponding compilation items are:/MD/ml/mt
3. Static library and dynamic library CORE
All core issues related to static and dynamic libraries and connection problems are:
- Find out whether to reference others' libraries as static or dynamic databases;
- Static or dynamic databases are used as libraries for others.
The so-called "take" and "people" are used by the people.
A common problem is what underlying libraries of the referenced system are, static databases or dynamic databases. Generally, the MFC program depends on the MFC library, and can selectively depend on the CRT library. Do not conflict with the static and dynamic libraries used.Several static and dynamic libraries
In vc6, for static dynamic libraries, the components are removed as a special dynamic library, and there are still five types. Generate a demo program one by one and study the settings to see the difference.
The static library exports the H header file and the Lib file. The LIB file contains program code, which is relatively large. The header file is used during source code compilation and the Lib file is used for linking. The library file is not required during runtime.
The dynamic library exports the H header file, Lib, and DLL files. The LIB file only contains the function index location of the program, which is relatively small. The header file is used for source code compilation, the Lib file is used for linking, And the DLL file is required for running.
This is the MFC DLL
The DLL analysis is as follows:
In essence, we can see that there are only two types of libraries: static library and dynamic library. They indicate whether they are static databases or dynamic databases.
Because the static library is used by others, there is no import/export identifier;
The dynamic library must have an import and export identity. For DLL, there are mfc dll and common win DLL. In fact, the so-called mfc dll is only a special encapsulation of dllmain, especially to facilitate resource access. The so-called extension DLL is only intended to be compatible with C; only non-MFC functions are required to be exported.
These static libraries can be configured to use the MFC Library and the CRT library. This is used to solve what database is referenced.
For static and dynamic libraries, some compilation settings are automatically generated by the MFC wizard. But the most fundamental core is in DSP:
# Targtype "Win32 (x86) static library" 0x0104
! Message "teststaticlib-Win32 release" (based on "Win32 (x86) static library ")
! Message "teststaticlib-Win32 debug" (based on "Win32 (x86) static library ")
If you want to compile a static library into another dynamic library, or vice versa, you only need to replace the unified search in the DSP with another format. Of course, it is more encouraging to generate multiple compilation configuration items.Methods To avoid conflicts
For static and dynamic libraries, there is always a problem in the compilation link. The root cause of these problems is that a static library and its dynamic library are introduced for a project. This will cause a conflict of the same name.
There are two solutions:
- Make sure that all projects are introduced in the same way to a database. This may search all projects
- For a compiled project, if a library conflict is known, ignore the static and dynamic libraries of the library.
4. How to maximize the most rational use of each function library
- If the program is an MFC program, we recommend that you use the MFC Library whenever possible; do not rely on the CRT library whenever possible.
- If the program is only a Win32 program, we recommend that you do not use the MFC Library as much as possible, depending on the CRT library.
- If the program is only a console program, it should be dependent on the CRT library as much as possible, and less on the win api library and the MFC library.
Principle, as few dependent libraries as possible. For functions of the same function, CRT may have, win api library, and MFC library, and select the correct library.