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