Да, было. Более того - с подобным борюсь сейчас, переделывая логику уже работающего приложения :). Правда, баги не "непонятные", а вполне себе адекватные, видимо из-за того, что изначальная архитектура была неплоха.
Такая ситуация говорит о том, что не продумана логика взаимодействия этих частей. И очень хорошо, что это вылезло до релиза.
Все приходит с опытом. Отключайте его по частям, ищите проблему. Используйте Assert во время написания нового кода, запускайте под отладчиком, используйте Log.d (видео ) . Не забывайте про синхронизацию (TCriticalSection (TMonitor)\AtomicIncrement и др\Synchronize для обновления GUI ) если используете другие потоки, - без нее будут случайные и не постоянно появляющиеся ошибки AV. Возможно программа слишком не оптимизированная (куча контролов\много картинок в ImageList напр), забирает много памяти и девайс глючит.
Может тут еще советов дадут.
Как-то вы поступили очень грубо
В ваших целях достаточно было воспользоваться директивами препроцессора:
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsmemoryallocsizes_xml.html
type
TTh = class(TThread)
protected
procedure Execute; override;
end;
implementation
procedure Do;
var
I: Integer;
begin
for I := 1 to 5000 do
TTh.Create(False);
end;
{ TTh }
{$M 16384, 65535}
procedure TTh.Execute;
begin
while True do
Sleep(50);
end;
Легче всего, по моему мнению, сделать так:
...
FWnd := AllocateHWnd(WindowProc);
...
procedure WindowProc(var AMsg: TMessage);
begin
case AMsg.Msg of
WM_HOTKEY:
case TWMHotKey(AMsg).hotkey of
1: ...;
2: ...;
...
end;
end;
end;
...
RegisterHotkey(FWnd, ...); // как обычно в VCL
...
UnregisterHotkey(...); // как обычно в VCL
...