Показать сообщение отдельно
  #2  
Старый 12.08.2013, 10:20
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

А в чём смысл такого кода?
Код:
         DLL_PROCESS_ATTACH: // DLL присоединена к процессу;
           // выделение памяти
           Buffer:=AllocMem(255);
           //decision:=DoThings;
         DLL_PROCESS_DETACH: // DLL отсоединена от процесса;
           // освобождение памяти
           FreeMem(Buffer); 
Buffer у Вас глобальная переменная, которая будет использоваться разными потоками и приведёт к большим проблемам.
например
1-й поток выполнил Buffer:=AllocMem(255); - всё нормально
2-й поток выполнил Buffer:=AllocMem(255); - будет затёрто предыдущее значение Buffer и утечка памяти. И оба потока будут параллельно использовать этот буфер с непредсказуемым результатом.
1-й поток выполнил FreeMem(Buffer); при этом унитожится массив, но ссылка на него останется в переменной Buffer, и второй поток будет пользоваться этой битой ссылкой.

Для начала попробуйте описать так

Код:
threadvar Buffer: PWideChar;     
threadvar decision: integer; 
Тогда каждый поток будет использовать свою копию переменных.
Ответить с цитированием