3

状況 : グローバル アトム テーブルに、アプリケーションと同じ文字列があります。アプリケーションがアプリケーション ハンドルを作成せず、無効なウィンドウ ハンドルを取得します。

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
4

0 に答える 0