Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi BugBug: TOleServer und SetThreadDesktop (https://www.delphipraxis.net/101073-bugbug-toleserver-und-setthreaddesktop.html)

Dezipaitor 8. Okt 2007 01:07


BugBug: TOleServer und SetThreadDesktop
 
Wer die Units OleServer und/oder OleCtrls einbindet und SetThreadDesktop im Hauptthread aufruft, der wird den Fehler 170 (Ressource wird bereits verwendet) bekommen.
Das liegt daran, dass die beiden Units im initialization Teil ein Fensterhandle (oder derartiges) erstellen. Ich habe das nicht weiter untersucht.

Dieser Fehler kommt nicht unter Delphi7. Jedoch wohl in allen BDS Versionen. Andere Versionen hab ich nicht testen können.

Lösung:
Wenn man wirklich beides braucht, dann muss man SetThreadDesktop in einen anderen Thread auslagern.

Apollonius hat mal freundlicherweise ein Beispiel geschrieben.
Delphi-Quellcode:
program TrySetThreadDesktop;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows
  OleServer,
  OleCtrls;


var Old, New: Cardinal;
begin
  Old:=GetThreadDesktop(GetCurrentThreadID);
  try
    New:=CreateDesktop('MyDesktop', nil, nil, 0, GENERIC_ALL, nil);
    try
      if not SetThreadDesktop(New) then
       Writeln(SysErrorMessage(GetLastError))
      else
       begin
        SetThreadDesktop(Old);
        Writeln('Success');
       end;
    finally
      CloseDesktop(New);
    end;
  finally
    CloseDesktop(Old);
  end;
  Readln;
end.
Der Fehler ensteht sofort beim ersten SetThreadDesktop.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz