Shared Data Sections mit cygwin (Win32)



  • Hallo,

    ich möchte eine DLL schreiben, mit der ich einen globalen Hook setze (Message Hook). Nun soll meine Anwendung, die den Hook lädt auch auf Daten anderer DLL Instanzen zugreifen können. Jeder Prozess lädt ja dann meine DLL in seinen Speicher. Nun habe ich viele Beispiele gefunden, wie man das macht. Das scheint wohl alles zu klappen, aber mit cygwin will es einfach nicht gehen. In den Beispielen wird halt immer MS Compiler benutzt.

    Hier mal mein Code:

    #pragma data_seg(".HOOKDATA")
    
    static HWND hw = NULL;
    static WORD hookThreadId = 0;
    #pragma data_seg()
    
    #pragma comment(linker, "/section:.HOOKDATA,RWS")
    

    Variable hw soll nun global sein, d.h. alle Instanzen sollen ihre Wert in hw schreiben. Und mit diesen Anweisungen soll das auch möglich sein.
    Hat jemand Erfahrungen, wie ich das mit cygwin, also gcc richtig compiliere?

    Wäre ich sehr dankbar!

    Grüße



  • ok nach einer kleinen Suche hier ist mir klar geworden, dass man das mit gcc wohl nur über Filemapping realisieren kann.

    Kann mir noch jemand sagen, was FileMapping genau ist?

    das ist übrigens das Beispiel mit Filemapping: http://www.c-plusplus.net/forum/viewtopic.php?t=10367&highlight=mousehook



  • ok meine Lösung sah jetzt so aus, dass ich mir MSVC++ Express gezogen hab und damit die DLL Datei erstellt habe. Nun gehts ohne Probleme...



  • Mit gcc geht es so:

    // MinGW-Variante für gemeinsam benutzte Datenbereiche:
    #define SHARED __attribute__((section(".shr"), shared))

    int global1 SHARED = 0; und dann so ...
    int SHARED global2 = 0; ... oder auch so rum ...

    kann man in der gcc.info nachlesen.


Anmelden zum Antworten