2016-04-22 2 views
-1

У меня есть Dll (C++), который содержит data_seg, который используется для обмена переменными среди других программ. Он работает, и многие программы используют его (30+). Проблема в том, что я добавил эту библиотеку в новый проект, но переменную, к которой я пытаюсь получить доступ, никогда не меняет ее значение. Я должен перезапустить программу, и теперь она синхронизирована с остальными другими программами, и я могу увидеть последнее значение переменной. Любая подсказка?Dll и общая переменная

спасибо.

+0

Haaaaaaard угадать, не зная, как вы на самом деле разделить эту память ... –

+0

DLL переменные не являются * разделяемый между пользователями библиотек (users = процессы), каждый процесс, зависящий от библиотеки, имеет свою собственную переменную, возможно, перезапуск программы заставляет загружать значение, потому что оно инициализирует значение из некоторой внешней информации. –

+0

Не только каждый пользователь, каждый процесс! Однако это верно только в том случае, если переменная не указывает на какую-то общую память (см., Например, https://msdn.microsoft.com/en-us/library/windows/desktop/aa366878%28v=vs.85%29 .aspx). – Aconcagua

ответ

1

Вы не предоставляете много информации - например, как вы объявляете свои переменные или как их изменять. Я предполагаю, что вы написали это правильно, как в MSDN документации:

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

Из вашего описания - это переменные синхронизируются только после перезапуска приложения, я могу только подозревать, у вас есть некоторые проблемы кэширования. Я предлагаю вам сделать ваши переменные изменчивыми и использовать атомы для их изменения/чтения.

, например:

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

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

теперь изменить g_mydata (прирост на 1):

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

Я создаю переменную вроде этого: int my_variable = 0, и вся переменная имеет свой getter/setter, вот как она работает. Я не понимаю, почему они не сработают, потому что у нас более 1000 переменных, работающих отлично. – LVB

Смежные вопросы