Вам нужна статическая логическая переменная инициализации и мьютекс .Статически инициализируйте «initialized» в 0. В вашем DllMain () сделайте вызов CreateMutex ().Используйте bInitialOwner = 0 и уникальное имя для lpName, уникальное для вашего приложения.Затем используйте WaitForSingleObject () для ожидания мьютекса.Проверьте, не инициализировано ли ненулевое значение.Если нет, выполните инициализацию, а затем установите значение initialized в 1. Если значение initialized не равно нулю, ничего не делайте.Наконец, освободите мьютекс, используя ReleaseMutex (), и закройте его, используя CloseHandle ().
Вот некоторый псевдокод, без обработки ошибок и исключений:
initialized = 0;
DllMain()
{
mutex = CreateMutex(..., 0, "some-unique-name");
result = WaitForSingleObject(handle, ...);
if (result == WAIT_OBJECT_0) {
if (!initialized) {
// initialization goes here
initialized = 1;
}
}
ReleaseMutex(mutex);
CloseHandle(mutex);
}