2016-04-22 14 views
-1

Ich habe eine Dll (C++), die eine data_seg enthält, die zum Teilen von Variablen unter anderen Programmen verwendet wird. Es funktioniert und viele Programme verwenden es (30+). Das Problem ist, dass ich diese Bibliothek in ein neues Projekt eingefügt habe, aber die Variable, auf die ich zugreifen möchte, ändert niemals ihren Wert. Ich muss das Programm neu starten und jetzt ist es mit den anderen Programmen synchronisiert und ich kann den letzten Wert einer Variablen sehen. Irgendeine Ahnung?Dll und gemeinsame Variable

Vielen Dank.

+0

Haaaaaaard zu erraten, ohne zu wissen, wie Sie tatsächlich, dass der Speicher teilen ... –

+0

DLL-Variablen sind nicht * shared * zwischen Benutzern von Bibliotheken (users = processes), jeder Prozess, der von library abhängt, hat seine eigene Variable, wahrscheinlich verursacht ein Neustart des Programms das Laden des Wertes, weil er den Wert von einigen externen Informationen initialisiert. –

+0

Nicht nur jeder Benutzer, jeder Prozess! Dies ist jedoch nur dann richtig, wenn die Variable nicht auf eine Art Shared Memory verweist (siehe zB https://msdn.microsoft.com/en-us/library/windows/desktop/aa366878%28v=vs.85%29 .aspx). – Aconcagua

Antwort

1

Sie geben nicht viele Informationen - wie Sie Ihre Variablen deklarieren oder wie Sie sie ändern. Ich nehme an, Sie es wie in MSDN-Dokumentation richtig geschrieben haben:

https://msdn.microsoft.com/en-us/library/h90dkhs0%28v=vs.90%29.aspx?f=255&MSPPError=-2147217396

Aus Ihrer Beschreibung - die Variablen erst nach Neustart der Anwendung synchronisiert sind, kann ich nur vermuten, dass Sie einige Caching-Probleme haben. Ich schlage vor, Sie machen Ihre Variablen volatil und verwenden Atomics, um sie zu ändern/zu lesen.

zum Beispiel:

#pragma data_seg("Shared") 
volatile LONG g_mydata = 0; 
#pragma data_seg() 

#pragma comment(linker, "/Section:Shared,RWS") 

jetzt g_mydata (Zuwachs um 1) zu ändern:

InterlockedExchangeAdd((PLONG)&g_mydata, 1); 
+0

Ich erstelle eine Variable wie folgt: int my_variable = 0, und alle Variablen haben ihren Getter/Setter, so funktioniert es. Ich verstehe nicht, warum sie nicht funktionieren werden, weil wir über 1000 Variablen haben, die perfekt funktionieren. – LVB

Verwandte Themen