diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/PDK/Source/GUID-539C4AA4-FF3F-4D6B-90A5-677092DBE54E.dita --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/PDK/Source/GUID-539C4AA4-FF3F-4D6B-90A5-677092DBE54E.dita Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,56 @@ + + + + + +Exporting +Global Data from a DLLExporting global data from a DLL to be accessed by either P.I.P.S. +or Symbian C++ applications is one of the typical problems that developers +encounter. +

It is strongly recommended to avoid having global data in DLLs due to following +reasons:

+ +

On having understood the above limitations, the following pattern can be +used for exporting global data from a DLL:

+
    +
  1. Do not export global +variables. Within DLL, say there is one global variable, for example:

    int globalVal;
  2. +
  3. Export one method that +returns a pointer to that variable.

    extern "C" EXPORT_C int* GlbData () + { + return &globalVal + } +
  4. +
  5. Define a macro for the +user of the DLL. Within the DLL header (for example, xxx.h), +define the following:

    #ifdef __cplusplus +extern "C" +#endif +IMPORT_C int* GlbData (); +#define globalVal (*GlbData())

    And the usage is like:

    #include <xxx.h> // DLL header +int main() + { + int i = 0; + globalVal = 10; + globalVal++; + i = globalVal; + return 0; + } +
  6. +
+
\ No newline at end of file