Using dllimport and dllexport in C++ Classes Microsoft Specific You can declare C++ classes with the dllimport or dllexport attribute. These forms imply that the entire class is imported or exported. Classes exported this way are called exportable classes. The following example defines an exportable class. All its member functions and static data are exported: #define DllExport __declspec( dllexport ) class DllExport C { int i; virtual int func( void ) { return 1; } }; Note that explicit use of the dllimport and dllexport attributes on members of an exportable class is prohibited. dllexport Classes When you declare a class dllexport, all its member functions and static data members are exported. You must provide the definitions of all such members in the same program. Otherwise, a linker error is generated. The one exception to this rule applies to pure virtual functions, for which you need not provide explicit definitions. However, because a destructor for an abstract class is always called by the destructor for the base class, pure virtual destructors must always provide a definition. Note that these rules are the same for nonexportable classes. If you export data of class type or functions that return classes, be sure to export the class. dllimport Classes When you declare a class dllimport, all its member functions and static data members are imported. Unlike the behavior of dllimport and dllexport on nonclass types, static data members cannot specify a definition in the same program in which a dllimport class is defined. Inheritance and Exportable Classes All base classes of an exportable class must be exportable. If not, a compiler warning is generated. Moreover, all accessible members that are also classes must be exportable. This rule permits a dllexport class to inherit from a dllimport class, and a dllimport class to inherit from a dllexport class (though the latter is not recommended). As a rule, everything that is accessible to the DLL''''s client (according to C++ access rules) should be part of the exportable interface. This includes private data members referenced in inline functions. Selective Member Import/Export Because member functions and static data within a class implicitly have external linkage, you can declare them with the dllimport or dllexport attribute, unless the entire class is exported. If the entire class is imported or exported, the explicit declaration of member functions and data as dllimport or dllexport is prohibited. If you declare a static data member within a class definition as dllexport, a definition must occur somewhere within the same program (as with nonclass external linkage). Similarly, you can declare member functions with the dllimport or dllexport attributes. In this case, you must provide a dllexport definition somewhere within the same program. It is worthwhile to note several important points regarding selective member import and export:
[1] [2] 下一页 [系统软件]Explanation of UFT-8 and Unicode [常用软件]神奇 我家的照片会唱歌 照片会唱歌 [VB.NET程序]VB.NET and C# 语法比较手册 [VB.NET程序]VB.NET特性---- Dllimport特性 [Delphi程序]IntraWeb And ActiveForms [Delphi程序]different between BPL and DLL [VB.NET程序]How to setup a basic Struts project using Ecli… [网页制作]Classes and Objects in PHP5 [网页制作]Twist and Fade 3.0操作界面介绍 [网页制作]FW - Twist and Fade 3.0 介绍
|