FAQ:WinAPI VCPP:общие для разных процессов переменные в DLL

Материал из Весельчак У

Перейти к: навигация, поиск

Я написал DLL, которую используют несколько приложений. Всё работает, но когда происходит очередной вызов функции из DLL, почему то, данные в функции обнуляются. С чем это связано?

Переменные и массивы в DLL, содержимое которых должно использоваться несколькими процессами, должны объявляться статическими. Статическая переменная или массив инициализируются только один раз в момент загрузки DLL.

Пример:

DWORD calltest()
{
// будет выполнено только при первом вызове
static DWORD callcount = 0;
static DWORD str[1000] = {0};
 
// будет выполняться каждый раз
callcount++;
return callcount;
}