From: Aaron W. L. <aar...@aa...> - 2004-05-07 05:00:26
|
It might be helpful to look up the exact documented semantics of dllimport on GCC here: http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function%20Attributes Quoting: dllimport On Microsoft Windows targets, the dllimport attribute causes the compiler to reference a function or variable via a global pointer to a pointer that is set up by the Microsoft Windows dll library. The pointer name is formed by combining _imp__ and the function or variable name. The attribute implies extern storage. Currently, the attribute is ignored for inlined functions. If the attribute is applied to a symbol definition, an error is reported. If a symbol previously declared dllimport is later defined, the attribute is ignored in subsequent references, and a warning is emitted. The attribute is also overridden by a subsequent declaration as dllexport. When applied to C++ classes, the attribute marks non-inlined member functions and static data members as imports. However, the attribute is ignored for virtual methods to allow creation of vtables using thunks. On cygwin, mingw and arm-pe targets, __declspec(dllimport) is recognized as a synonym for __attribute__ ((dllimport)) for compatibility with other Microsoft Windows compilers. The use of the dllimport attribute on functions is not necessary, but provides a small performance benefit by eliminating a thunk in the dll. The use of the dllimport attribute on imported variables was required on older versions of GNU ld, but can now be avoided by passing the --enable-auto-import switch to ld. As with functions, using the attribute for a variable eliminates a thunk in the dll. One drawback to using this attribute is that a pointer to a function or variable marked as dllimport cannot be used as a constant address. The attribute can be disabled for functions by setting the -mnop-fun-dllimport flag. Aaron |