FAQ:WinAPI VCPP:разделяемые переменные в dll — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) (Новая: ===Имеется DLL. В ней есть некоторые данные (скажем, массив int). Как сделать, чтобы переменные в DLL были одн...) |
(нет различий)
|
Версия 10:05, 29 июля 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;