INFO: __declspec(dllexport) Replaces __export in 32-bit VC++Last reviewed: September 30, 1997Article ID: Q107501 |
The information in this article applies to:
SUMMARYThe __export keyword provided with the Visual C++ for Windows compiler is obsolete with the Microsoft Visual C++ 32-bit compiler. The equivalent functionality for WIN32 can be achieved by using the keyword __declspec with the dllexport attribute. With Visual C++ 32-bit Edition, verison 4.0, compiling code containing the __export (or _export) keyword results in either of the following warnings:
C4236: nonstandard extension used : '__export' is an obsolete keyword, see documentation for __declspec(dllexport) -or- C4226: nonstandard extension used : '__export' is an obsolete keywordCompiling code containing the __export (or _export) keyword with 32-bit Visual C++, versions 1.0 and 2.x, results in the C4226 warning.
MORE INFORMATIONThe __declspec construct is not supported by the tools supplied with Microsoft Win32 Software Development Kit (SDK). When porting DLL source code from Windows to Win32, replace each instance of __export with __declspec( dllexport ). The __declspec(dllexport) keyword can be used to export data, functions, classes, or class member functions. For example:
/* exported function */ __declspec( dllexport ) void func(); /* exported data */ __declspec( dllexport ) int i; // exported class class __declspec( dllexport ) DLLClass { ... }; class DLLClass { public: // exported member function __declspec( dllexport ) void MemberFunction( void ); };The sample code below demonstrates exporting classes and class member functions from a DLL using the __declspec( dllexport ) and __declspec( dllimport ) storage class attributes in the DLL and EXE, respectively.
Sample Code
/* DLL Sample: TESTDLL.CPP /* Compile options needed: /D"_X86" /MT TESTDLL.CPP /link /* /DLL /OUT:testdll.dll /implib:testdll.lib */ #include <stdio.h> class DLLClass { public: // exported member function __declspec( dllexport ) void functionA( void ) { printf("\nIn Function A of the exported function"); } }; // exported class class __declspec( dllexport) ExportDLLClass { public: void functionB(void) { printf("\nIn Function B of the exported class"); } }; // exported instance of the DLLClass __declspec(dllexport) DLLClass test; /* Source that calls the DLL Sample: CALLDLL.CPP /* Compile options needed: /D"_X86" /D"_CONSOLE" /ML CALLDLL.CPP /* TESTDLL.LIB */ #include <stdio.h> class DLLClass { public: // imported member function __declspec( dllimport ) void functionA( void ); }; class __declspec( dllimport) ExportDLLClass { public: void functionB(void); }; __declspec( dllimport ) DLLClass test; void main(void) { ExportDLLClass TestClass; test.functionA(); TestClass.functionB(); } REFERENCESFor more information on exporting, query on the following words in the Microsoft Knowledge Base:
__export and def and prolog and dllexportFor more information creating DLLs for WIN32 or on the dllexport and dllimport storage class attributes, refer to Chapter 4 of the "Programming Techniques" manual that ships with Visual C++ 32-bit Edition, or search for dllexport or dllimport or export in the Visual C++ Books Online. >From within the Visual Workbench, select Help and choose Keyword Search.
|
Additional query words: 8.00 9.00
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |