SH>Ты создаёшь обьект в dll и пытаешься удалить его из exe? Не выйдет. Такие штуки можно делать с CoTaskMemAlloc и CoTaskMemFree. А new и delete должны вызываться в одном месте (malloc и free тоже). Причина скорее всего в том, что и у dll и у exe своя версия CRT,
каждая из них имеет свою кучу (а возможно и две. Тогда получается 2 + 2 + дефолтная = 5). При попытке освободить память не тем рантаймом он замечает, что указатель указывает не в его кучу => исключение и завершение программы. А потоки наверное непричём. Для решения проблемы можно в dll сделать специальную функцию, которая занимается удалением этих объектов, и вызывать её из exe. Возможно станет лучше, если использовать динамическую версию CRT.
версия CRT одна. пишется и Dll и сам сервис компиляются на одной машине. про отдельную функцию для удаления я уже думал. но мне вот интересно как скажем тогда создаются и удаляются объекты MFCшных классов? у них вроде нет никаких спец функций, а только new и delete