状況 : グローバル アトム テーブルに、アプリケーションと同じ文字列があります。アプリケーションがアプリケーション ハンドルを作成せず、無効なウィンドウ ハンドルを取得します。
FMX.Platform.Win からのコード
procedure TPlatformWin.CreateAppHandle;
var
//...
begin
//...
AtomName := ModuleName;
AppAtom := GlobalFindAtom(PChar(AtomName));
if AppAtom > 0 then begin
FApplicationHWND := 0; // FApplicationHWND = 0 and I get "invalid window handle"
end else begin
// FApplicationHWND is created
exe が同じ名前の古いアプリケーションがあります。閉じた後、globalatomtable 'COM' に文字列が残っているようです。この古いアプリケーションを閉じた後。新しいアプリケーションを開くことができなくなりました。これは、グローバル アトム テーブルでこの 'COM' が見つかり続け、アプリケーション ハンドルが空になり、ウィンドウ ハンドルが無効になるためです。
コードをコメントに入れると、アプリケーションは有効なアプリケーション ハンドルで完璧に起動します。
// AtomName := ModuleName;
// AppAtom := GlobalFindAtom(PChar(AtomName));
// if AppAtom > 0 then begin
// FApplicationHWND := 0;
// end else