Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [Non-VCL] System kann Datei nicht finden bei RegisterClassEx (https://www.delphipraxis.net/42044-%5Bnon-vcl%5D-system-kann-datei-nicht-finden-bei-registerclassex.html)

jfheins 12. Mär 2005 15:07


[Non-VCL] System kann Datei nicht finden bei RegisterClassEx
 
Warum bekomme ich bei folgendem Code die Fehlermeldung
Zitat:

---------------------------
Project1
---------------------------
Das System kann die angegebene Datei nicht finden
---------------------------
OK
---------------------------
???

Ich wollte in NonVCL einsteigen, hab' mir Luckie's Tut angeschaut, und dann sowas ... :cry:

Code grösstenteils direkt ausm Tut übernommen ...

Delphi-Quellcode:
program Project1;

uses
  Windows, SysUtils, Dialogs;

var
  WindowClass: TWndClassEx;
  Handle: Word;

function WndProc(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam):lresult; stdcall;
begin
  Result := 0;
  Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
  {vereinfacht, da Fehlerunabhängig ... oder ?}
end;

begin
  WindowClass.cbSize := SizeOf(TWndClassEx);
  WindowClass.Style := CS_HREDRAW or CS_VREDRAW;
  WindowClass.lpfnWndProc := @WndProc;
  WindowClass.cbClsExtra := 0;
  WindowClass.cbWndExtra := 0;
  WindowClass.hbrBackground := COLOR_APPWORKSPACE;
  WindowClass.lpszMenuName := nil;
  WindowClass.lpszClassName := 'WndClass';
  WindowClass.hIconSm := 0;
  WindowClass.hInstance := hInstance;
  WindowClass.hIcon := LoadIcon(hInstance, MAKEINTRESOURCE(100));
  WindowClass.hCursor := LoadCursor(0, IDC_ARROW);

  SetLastError (0);

  Handle := RegisterClassEx(WindowClass);

  showmessage (SysErrorMessage (GetLastError));

  UnregisterClass (PChar (Handle), HInstance);
end.

Luckie 12. Mär 2005 15:25

Re: [Non-VCL] System kann Datei nicht finden bei RegisterCla
 
Die Variable Handle ist zu klein. Ich bin mir ziemlich sicher, dass ich sie nicht als WORD deklariert habe, sondern entweder als DWORD oder THandle. Aber ob es das ist, weiß ich nicht.

jfheins 12. Mär 2005 16:39

Re: [Non-VCL] System kann Datei nicht finden bei RegisterCla
 
Nein, das ist es nicht ... Der Fehler tritt sowohl bei LongWord, als auch bei THandle (was nix anderes ist) auf.

In deinen Beispiel verarbeitest du den Rückgabewert von Registerclassex nicht, sondern rufst createwindowex mitt dem klassennamen, statt dem atom auf, aber ob es daran liegt ... :gruebel:

Christian Seehase 13. Mär 2005 00:27

Re: [Non-VCL] System kann Datei nicht finden bei RegisterCla
 
Moin Julius,

schau Dir doch mal die Doku zu RegisterClassEx an.
Wenn die Funktion fehlschlägt ist der Rückgabewert 0.
Da er dies in diesem Falle nicht ist, ist der Wert von GetLastError uninteressant, bzw. er sagt nichts aus.

Neutral General 8. Okt 2007 18:15

Re: [Non-VCL] System kann Datei nicht finden bei RegisterCla
 
Hi,

Habe gerade das selbe Problem. Versuche eine Klasse zu registrieren, bekomme aber die selbe Meldung wie jfheins. Gibt es da keine Lösung? Muss doch. Mich wunderts vorallem was da für eine Datei gemeint ist o.O Das ganze hat doch nichts mit Dateien zu tun...

Gruß
Neutral General

Luckie 8. Okt 2007 20:01

Re: [Non-VCL] System kann Datei nicht finden bei RegisterCla
 
Welchen Wert bekommst du von RegisterClassEx?

turboPASCAL 8. Okt 2007 20:31

Re: [Non-VCL] System kann Datei nicht finden bei RegisterCla
 
GetLastError gibt in dem Beispiel oben 2 zurück. Keine Ahnung was das soll. :gruebel:

Luckie 8. Okt 2007 20:34

Re: [Non-VCL] System kann Datei nicht finden bei RegisterCla
 
Ich habe nicht nach GetLastError gefragt.
Zitat:

If the function succeeds, the return value is a class atom that uniquely identifies the class being registered.
Zitat:

If the function fails, the return value is zero. To get extended error information, call GetLastError.
GetLastError wird also nur dann sinnvolle Werte liefern, wenn RegisterClassEx null zurückliefert.

turboPASCAL 8. Okt 2007 20:41

Re: [Non-VCL] System kann Datei nicht finden bei RegisterCla
 
RegisterClassEx liefert einen Wert > 0 zurück. zB.: 49558 ;)

Luckie 8. Okt 2007 20:44

Re: [Non-VCL] System kann Datei nicht finden bei RegisterCla
 
Dann ist der Wert von GetLastError unbestimmt, weil die Funktion erfolgreich war.

Delphi-Quellcode:
Handle := RegisterClassEx(WindowClass);
if Handle = 0 then
  ShowMessage (SysErrorMessage (GetLastError));
So wäre es richtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr.
Seite 1 von 2  1 2      

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