FAQ:WinAPI VCPP:разделяемые переменные в dll — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) (Новая: ===Имеется DLL. В ней есть некоторые данные (скажем, массив int). Как сделать, чтобы переменные в DLL были одн...) |
RXL (обсуждение | вклад) м (/* Имеется DLL. В ней есть некоторые данные (скажем, массив int). Как сделать, чтобы переменные в DLL были одними и теми же для всех программ, исп) |
||
Строка 5: | Строка 5: | ||
# Разделяемые переменные. Та же глава. | # Разделяемые переменные. Та же глава. | ||
− | < | + | <syntaxhighlight lang="cpp"> |
// Здесь создаём свой сегмент данных. Переменные должны | // Здесь создаём свой сегмент данных. Переменные должны | ||
// быть обязательно иницилизированы и помешены между | // быть обязательно иницилизированы и помешены между | ||
Строка 17: | Строка 17: | ||
#pragma comment(linker, /SECTION Shared,RWS ); | #pragma comment(linker, /SECTION Shared,RWS ); | ||
− | </ | + | </syntaxhighlight> |
Есть другой путь принудительного включения в сегмент, но сегмент уже должен быть упомянут ранее. | Есть другой путь принудительного включения в сегмент, но сегмент уже должен быть упомянут ранее. | ||
+ | <syntaxhighlight lang="cpp"> | ||
__declspec(allocate("Shared")) int с = 0; | __declspec(allocate("Shared")) int с = 0; | ||
+ | </syntaxhighlight> | ||
[[Category:FAQ:WinAPI VCPP]] | [[Category:FAQ:WinAPI VCPP]] |
Версия 01:05, 30 июля 2008
Имеется DLL. В ней есть некоторые данные (скажем, массив int). Как сделать, чтобы переменные в DLL были одними и теми же для всех программ, использующих эту DLL? (Например, при загрузке DLL, в массиве нет данных. Каждая программа добавит в массив новые данные.)
Есть два пути решения:
- Проецируемые в память файлы (с доступом чтение/запись). Книга: Д. Рихтер "Виндовс для проффесионалов", Глава 17.
- Разделяемые переменные. Та же глава.
// Здесь создаём свой сегмент данных. Переменные должны // быть обязательно иницилизированы и помешены между // двумя pragma data_seg. Иначе они не войдут в данный // сегмент. #pragma data_seg("Shared") LONG g_lInstanceCount = 0; #pragma data_seg() // Теперь только осталось указать компилятору свойства этого сегмента #pragma comment(linker, /SECTION Shared,RWS );
Есть другой путь принудительного включения в сегмент, но сегмент уже должен быть упомянут ранее.
__declspec(allocate("Shared")) int с = 0;