Globale Variablen und Shared Memory in dll (dev c++)



  • Hallo,

    bisher wurde mir hier immer wunderbar geholfen. Also komme ich mit weiteren Fragen:

    1.) In einem anderen Thread wurd ich darauf aufmerksam gemacht, dass meine Deklaration von global gültigen Variablen nicht gut wäre. Leider fand ich bis heute keine Informationen darüber, wo und wie man in einem dll-Projekt am besten global gültige Variablen deklariert. Deshalb hier meine Frage an die Profis: Wo und wie...? 😉

    2.) Eine dieser global gültigen Variablen soll ein SHARED Element sein, das jer Instanz der dell zur Verfügung steht. In dev C++ habe ich folgende Möglichkeiten gefunden:
    dll.h

    ...
    #define SHARED __attribute__((section("shared"),shared))
    ....
    

    dllmain.cpp

    ...
    #include "dll.h"
    ....
    BOOL APIENTRY DllMain (...)
    {...}
    
    bool meineVariable SHARED = false;
    ...
    

    oder direkt in einem Aufwasch:

    bool meineVariable __atribute__((section("shared"),shared)) = false;
    

    Leider meldet mein aufrufendes C#-Programm eine Zugriffsverletzung auf "geschützen" Speicher...
    Edit: und zwar jedes mal, wenn die variable gelesen oder geschrieben wird.

    Danke Jens



  • Hallo Leute,

    ich bin selbst drauf gekommen: Das Problem lag nich in der Shared Section. Soweit kam es garnicht: Das Problem lag darin, dass ich von C# aus einen String übergeben habe und die Funktion diesen als C++ string engegennehmen wollte. Das funktioniert natürlich nicht.
    Die Lösung sieht so aus:

    void DLLEXPORT InitDLL(const char *sParameter, int iWert)
    {
        ....
    }
    

    Da ich mit Zeigern und Referenzen in C++ noch nicht so ganz warm geworden bin, bräuchte ich mal jemanden, der mir erklärt, was im genannten Beispiel passiert und wie ich aus const char *sParameter wieder einen C++-String mache.

    Danke

    Jens


Log in to reply