FAQ:WinAPI VCPP:разделяемые переменные в dll

Материал из Весельчак У
Версия от 22:00, 6 августа 2008; Mczim (обсуждение | вклад) (/* Имеется DLL. В ней есть некоторые данные (скажем, массив int). Как сделать, чтобы переменные в DLL были одними и теми же для всех программ, исп)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Имеется DLL. В ней есть некоторые данные (скажем, массив int). Как сделать, чтобы переменные в DLL были одними и теми же для всех программ, использующих эту DLL? (Например, при загрузке DLL, в массиве нет данных. Каждая программа добавит в массив новые данные.)

Есть два пути решения:

  1. Проецируемые в память файлы (с доступом чтение/запись). Книга: Д. Рихтер "Windows для проффесионалов", Глава 17.
  2. Разделяемые переменные. Та же глава.
// Здесь создаём свой сегмент данных. Переменные должны
// быть обязательно иницилизированы и помещены между
// двумя 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;