А в чём смысл такого кода?
Код:
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;
Тогда каждый поток будет использовать свою копию переменных.