How to Use _export Keyword or DEF File EXPORTS Statement

ID: Q77986


The information in this article applies to:
  • Microsoft Windows Software Development Kit (SDK) versions 3.0, 3.1


SUMMARY

In Windows 3.0 and later, the _export keyword should not be used as a general replacement for exporting functions in the EXPORTS section of a module-definition (DEF) file.


MORE INFORMATION

The _export declarator can sometimes be used to export functions from Windows-based applications and dynamic-link libraries (DLLs); however, this method has several limitations.

In the Windows environment, all callback functions must be flagged as exported to ensure that the prolog code is fixed up at load time. The fixed up prolog code works with the procedure-instance addresses returned from the MakeProcInstance() function to bind the proper data segment to the exported function when it is called.

Examples of callback functions are: window procedures, dialog box procedures, and enumeration callback procedures (see Section 14.4, "Writing Exported Functions" in the "Microsoft Windows Software Development Kit Guide to Programming"). A DLL must also flag as exported any functions called from other modules.

The second edition of "Programming Windows" by Charles Petzold (Microsoft Press) has a good explanation of the special Windows prolog code and the effects of listing functions in the EXPORTS section of the module- definition file (pages 280-286 and 895-896).

Usually, functions are flagged as exported by listing them in the EXPORTS section of the modules' module-definition file. In addition to enabling fixup of the prolog code, exporting functions from the module-definition file provides control of the ordinal values of the exported functions. This is especially important for DLLs because existing applications that call the exported functions will not need to be relinked when the DLL is modified if the interface-function prototypes and ordinal values are not changed between versions. Specifying ordinal values also allows the Windows dynamic-link mechanism to operate faster and to use less memory.

When compiling Windows-based applications and DLLs using Microsoft C version 6.0 and later, the _export keyword may be used in place of listing the function in the EXPORTS section of the module-definition file, with the following limitations:

  • This method provides no control over the ordinal values of the exported functions (as discussed above).


  • The function name is not resident. RESIDENTNAME, required for WEPs (Windows exit procedures) in DLLs, can be specified only in a module-definition file.


  • Exportname cannot be specified (no alias name).


  • The NODATA option cannot be specified.


  • The "parameter-option specification" cannot be overridden.


For more information, see pages 10-4 and 10-5 in the "Microsoft Windows Software Development Kit Reference Volume 2."

Additional query words:

Keywords : kb16bitonly KrDll
Version : WINDOWS:3.0,3.1
Platform : WINDOWS
Issue type : kbhowto


Last Reviewed: November 4, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.