BDS_2006 не закрывается программа
Написал программу, провел серию тестов, вроде все чики пуки.
Залез в настройки убрал галочку
Built with runtime packages
---------
Программа скомпилилась, но перестала запускаться
при запуске просит ComCtrls.pas указать где есть эта шняга.
Вернул галочку на место... Теперь при закрытии приложения выводится окошко с названием CPU
ntdll.DbgBreakPoint:
7C901230 CC int 3
7C901231 C3 ret
и стрелочка указывает на нижнее сообщение....
Вообщем приложение можно так сказать перестало работать...
Чего ему ненравится? =)
Исходники в студию! =)
ntdll.DbgBreakPoint
оказалось что эта хрень отладочная и вылазит время от времени... Это лажа разработчиков среды разработки. Как бороться, видел только патчи на паскале =( вообщем апздеЦ.
Сейчас попробую создать новый проект
Вот один из вариантов решения этой проблемы
(C) Francois PIETTE взято с [COLOR=#0000ff]http://www.howtodothings.com/showarticle.asp?article=502[/COLOR]
Add this procedure to your unit, and also the initialisation
section below. At runtime, the offending INT3 will be replaced
by a NOP instruction.
procedure PatchINT3;
var
NOP : Byte;
BytesWritten : DWORD;
NtDll : THandle;
P : Pointer;
begin
if Win32Platform <> VER_PLATFORM_WIN32_NT then Exit;
NtDll := GetModuleHandle('NTDLL.DLL');
if NtDll = 0 then Exit;
P := GetProcAddress(NtDll, 'DbgBreakPoint');
if P = nil then Exit;
try
if Char(P^) <> #$CC then Exit;
NOP := $90;
if WriteProcessMemory(GetCurrentProcess, P, @NOP, 1,
BytesWritten) and (BytesWritten = 1) then
FlushInstructionCache(GetCurrentProcess, P, 1);
except
//Do not panic if you see an EAccessViolation here,
// it is perfectly harmless!
on EAccessViolation do ;
else raise;
end;
end;
initialization
PatchINT3;
Решение:
Десят раз перечитать карл маркса =).
Вообщем лажа в том, что были нарушены границы массива, засчет чего рушился стек.