Microsoft Specific —>
The DLL interface refers to all items (functions and data) that are known to be exported by some program in the system; that is, all items that are declared as dllimport or dllexport. All declarations included in the DLL interface must specify either the dllimport or dllexport attribute. However, the definition can specify only the dllexport attribute. For example, the following function definition generates a compiler error:
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
DllImport int func() /* Error; dllimport prohibited in */
/* definition. */
{
return 1;
}
This code also generates an error:
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
DllImport int i = 10; /* Error; this is a definition. */
However, this is correct syntax:
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
DllExport int i = 10; /* Okay: this is an export definition. */
The use of dllexport implies a definition, while dllimport implies a declaration. You must use the extern keyword with dllexport to force a declaration; otherwise, a definition is implied.
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
extern DllImport int k; /* These are correct and imply */
Dllimport int j; /* a declaration. */
END Microsoft Specific