Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Microsoft Specific
The dllexport
and dllimport
storage-class attributes are Microsoft-specific extensions to the C and C++ languages. You can use them to export and import functions, data, and objects to or from a DLL.
__declspec( dllimport )
declarator
__declspec( dllexport )
declarator
These attributes explicitly define the DLL's interface to its client, which can be the executable file or another DLL. Declaring functions as dllexport
eliminates the need for a module-definition (.def
) file, at least with respect to the specification of exported functions. The dllexport
attribute replaces the __export
keyword.
If a class is marked __declspec(dllexport)
, any specializations of class templates in the class hierarchy are implicitly marked as __declspec(dllexport)
. It means that class templates are explicitly instantiated and the class's members must be defined.
dllexport
of a function exposes the function with its decorated name, sometimes known as "name mangling". For C++ functions, the decorated name includes extra characters that encode type and parameter information. C functions or functions that are declared as extern "C"
follow C name decoration rules. For more information on name decoration in C/C++ code, see Decorated names.
To export an undecorated name, you can link by using a Module Definition (.def
) file that defines the undecorated name in an EXPORTS
section. For more information, see EXPORTS
. Another way to export an undecorated name is to use a #pragma comment(linker, "/export:alias=decorated_name")
directive in the source code.
When you declare dllexport
or dllimport
, you must use extended attribute syntax and the __declspec
keyword.
// Example of the dllimport and dllexport class attributes
__declspec( dllimport ) int i;
__declspec( dllexport ) void func();
Alternatively, to make your code more readable, you can use macro definitions:
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
DllExport void func();
DllExport int i = 10;
DllImport int j;
DllExport int n;
For more information, see:
END Microsoft Specific