Shared memory in Win32 dlls



  • Hallo,

    ich habe ein Problem mit der Benuzung gemeinsam genutzter Speicherbereiche in Win32 dlls.

    Ich definiere eine neue Section in einer dll s.u. und sage dem Linker dass sie shared seinen soll.

    #pragma data_seg(".DSHIM_SHARED_VALUES")
    
    __declspec(allocate(".DSHIM_SHARED_VALUES")) unsigned int count = 0;
    
    #pragma data_seg()
    
    #pragma comment(linker, "/section:.DSHIM_SHARED_VALUES,RWS")
    

    Wenn ich die selbe dll nun in zwei verschiedene Prozesse lade, kann ich auf die Variable count in beiden Prozessen zugreifen. Mein shared memory funktioniert also. Sobald ich die dll aber in verschiedene Verzeichnisse kopiere und die Prozesse in den verschiedenen Verzeichnissen starte, funktioniert mein shared memory nicht mehr. Es ist die gleiche dll mit der gleichen shared section.

    Kann sich jemand erklären warum?

    Gruß
    Walli



  • Letzten Endes wird die Identität einer DLL durch Ihren Startpfad und Namen definiert. Eine identische DLL in einem anderen Verzeichnis wird von Windows als ein neues Modul angesehen.

    Woran sollte Windows sonst erkennen, dass eine DLL gleich ist...

    Verwende eine Memory Mapped File um den Effekt auch über unterschiedliche Module zu erreichen.


Anmelden zum Antworten