DLL Interface Declarations (Windows CE 5.0)

Send Feedback

The DLL interface refers to all items (functions and data) that are known to be exported by a program in the system; that is, all items that are declared as dllexport or dllimport.

All declarations included in the DLL interface must specify either the dllimport or dllexport attribute. However, the definition must specify only the dllexport attribute.

For example, the following function definition generates a compiler error:

__declspec( dllimport ) int func()  // Error; dllimport
                                    // prohibited on definition.
{
  return 1;
}
This code also generates an error:
#define DllImport  __declspec( dllimport )

__declspec( dllimport ) int i = 10;  // Error; this is a
                                     // definition.

However, this is correct syntax:

__declspec( dllexport ) int i = 10;    // Okay--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. Thus, the following examples are correct:

#define DllImport  __declspec( dllimport )
#define DllExport  __declspec( dllexport )

extern DllImport int k; // These are both correct and imply a
DllImport int j;        // declaration.

The following examples clarify the preceding:

static __declspec( dllimport ) int l; // Error; not declared extern.

void func()
{
    static __declspec( dllimport ) int s;  // Error; not declared
                                           // extern.
    __declspec( dllimport ) int m;         // Okay; this is a 
                                           // declaration.
    __declspec( dllexport ) int n;         // Error; implies external
                                           // definition in local scope.
    extern __declspec( dllimport ) int i;  // Okay; this is a
                                           // declaration.
    extern __declspec( dllexport ) int k;  // Okay; extern implies
                                           // declaration.
    __declspec( dllexport ) int x = 5;     // Error; implies external
                                           // definition in local scope.
}

See Also

dllexport, dllimport

Send Feedback on this topic to the authors

Feedback FAQs

© 2006 Microsoft Corporation. All rights reserved.