Writing your C++ DLL code

To create a simple C++ DLL:
  • Ensure that classes and class members are exported correctly, especially if they use templates.
  • Use _Export or the #pragma export directive to export specific functions and variables.

    For example, to create a DLL executable module TRIANGLE, export the getarea() function, the getperim() function, the static member objectCount and the static constructor for class triangle using #pragma export:

    Figure 1. Using #pragma export to create a DLL executable module TRIANGLE
       class triangle : public area
       {
          public:
             static int objectCount;
             getarea();
             getperim();
             triangle::triangle(void);
       };
       #pragma export(triangle::objectCount)
       #pragma export(triangle::getarea())
       #pragma export(triangle::getperim())
       #pragma export(triangle::triangle(void))
  • Do not inline the function if you apply the _Export keyword to the function declaration.
    Figure 2. Using _export to create DLL executable module TRIANGLE
       class triangle : public area
       {
          public:
             static int _Export objectCount;
             double _Export getarea();
             double _Export getperim();
             _Export triangle::triangle(void);
       };
  • Always export static constructors and destructors when using the _Export keyword.
  • Apply the _Export keyword to a class. This keyword automatically exports static members and defined functions of that class, constructors, and destructors.
       _class Export triangle
       {
          public:
             static int objectCount;
             double getarea();
             double getperim();
             triangle::triangle(void);
       };
  • To export all external functions and variables in the compilation unit to the users of this DLL, you can also use the compiler option EXPORTALL. For more information about this compiler option, see EXPORTALL | NOEXPORTALL in z/OS XL C/C++ User's Guide. For more information about #pragma export directives , see #pragma export in z/OS XL C/C++ Language Reference. If you use the EXPORTALL option, you do not need to include #pragma export or _Export in your code.