![]() |
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:
Der Fehler ensteht sofort beim ersten SetThreadDesktop.
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz