For normal class or function when we imported or exported has to go with two prototypes.

Exporting: When use in DLL project our prototype should be.
class __declspec(dllexport) CMyAboutBox;

Importing: When we are using in an application our prototype should be.
class __declspec(dllimport) CMyAboutBox;

For MFC we use only one common prototype i.e.
class AFX_EXT_CLASS CMyAboutBox;

AFX_EXT_CLASS macro is actually defined in two way for two projects thus we are able to use only one prototype.

Definitions are like the following:

// for classes
#ifndef AFX_CLASS_EXPORT
#define AFX_CLASS_EXPORT __declspec(dllexport)
#endif
#ifndef AFX_CLASS_IMPORT
#define AFX_CLASS_IMPORT __declspec(dllimport)
#endif
#ifdef _AFXEXT
#define AFX_EXT_CLASS       AFX_CLASS_EXPORT
#else
#define AFX_EXT_CLASS       AFX_CLASS_IMPORT
#endif

When we are using a DLL project _AFXDLL and _AFXEXT are defined in preprocessors in the project settings thus the resultant expanded form is
Class __declspec(dllexport) CMyAboutBox;

For Application project _AFXEXT macro is not defined thus
thus the resultant expanded form is
class __declspec(dllimport) CMyAboutBox;

About our authors: Team EQA

You have viewed 1 page out of 27. Your DLL learning is 0.00% complete. Login to check your learning progress.

#