home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VSCPPv7.zip / VACPP / IBMCPP / smarts / CPPDLL / PRAGMA / CPPDLL.HPP
Text File  |  1995-06-02  |  3KB  |  93 lines

  1.  
  2.  
  3. %PROLOG%
  4.  
  5. //-------------------------------------------
  6. // %FILE_NAME%.h - Header file for a C++ DLL
  7. //-------------------------------------------
  8.  
  9.  
  10. /*-----------------------------------------------------------------*/
  11. /* This file defines 3 classes, area, rectangle, and triangle      */
  12. /* whose members are explicitly exported using the #pragma export  */
  13. /* directive.  With #pragma export you can assign ordinals to the  */
  14. /* symbols so that they are maintained when you update the DLL.    */
  15. /* #pragma export also lets you specify the external name of the   */
  16. /* symbol.  To export your classes in this manner, you must add a  */
  17. /* #pragma export directive for each member data, function,        */
  18. /* constructor and destructor you want to export.  You must always */
  19. /* export constructors and destructors.  See the end of this file  */
  20. /* to see how it is done.                                          */
  21. /*-----------------------------------------------------------------*/
  22.  
  23.  
  24. /*--------------------------*/
  25. /* Define a base class      */
  26. /*--------------------------*/
  27. class area
  28.    {
  29.    private:
  30.       double dim1, dim2;
  31.    public:
  32.       static int   objectCount;
  33.       void setarea(double d1 , double d2);
  34.       void getDim(double &d1, double &d2);
  35.       virtual double getArea();
  36.       area::area(void);
  37.    };
  38.  
  39.  
  40. /*-----------------------------*/
  41. /* Define a derived class      */
  42. /*-----------------------------*/
  43. class rectangle : public area
  44.    {
  45.    public:
  46.       static int objectCount ;
  47.       double getArea();
  48.       rectangle::rectangle(void);
  49.    };
  50.  
  51.  
  52. /*------------------------------*/
  53. /* Define another derived class */
  54. /*------------------------------*/
  55. class triangle : public area
  56.    {
  57.    public:
  58.       static int objectCount;
  59.       double getArea();
  60.       triangle::triangle(void);
  61.    };
  62.  
  63.  
  64. /*--------------------------------------------------------*/
  65. /* Export symbols from the declared classes               */
  66. /*--------------------------------------------------------*/
  67. #pragma export(area::objectCount, "countArea", 1)
  68. #pragma export(area::getDim, "getAreaDimensions", 2)
  69. #pragma export(area::getArea, "getAreaArea", 3)
  70. #pragma export(area::area(), "createArea", 4)
  71. // Note:  area::setarea() is not exported because it is not required
  72.  
  73. #pragma export(triangle::objectCount, "countTriangle", 5)
  74. #pragma export(triangle::getArea, "getTriangleArea", 6)
  75. #pragma export(triangle::triangle(void), "createTriangle", 7)
  76.  
  77. #pragma export(rectangle::objectCount, "countRectangle", 8)
  78. #pragma export(rectangle::getArea, "getRectangleArea", 9)
  79. #pragma export(rectangle::rectangle(void), "createRectangle" , 10)
  80.  
  81.  
  82. /*--------------------------------------------------------*/
  83. /* Considerations: Ensure you export all the required     */
  84. /* member functions.  If an inlined or exported function  */
  85. /* uses private or protected members, you must also export*/
  86. /* those members.  In addition, you should also export    */
  87. /* all static members otherwise clients of your class will*/
  88. /* not be able to debug their code because the reference  */
  89. /* to the static data members cannot be resolved.         */
  90. /*--------------------------------------------------------*/
  91.  
  92.  
  93.