Hallo!
Ich bin grad dabei, eine Klassenbibliothek zu übersetzen. Komme nicht weiter. Bei der
API Funktion Windows.GetKeyBoardState bleibt der Compiler stehen. Folgende Fehlermeldung:
[Fehler] gdikeys.inc(301): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen.
Wenn ich aber @State schreibe statt State, bricht der Compiler mit der gleichen Fehlermeldung ab. Was ist da los?
Gibt es bei der Verwendung des Windows
API Faustregeln, mit denen man solche Probleme umschiffen kann. Eine wenigstens fast immer funktionierende Datendefinition. Die integrierte Hilfe sagt mir, das als Rückgabetyp für State ein Pointer gefordert ist. (ein lpKeyState vom Typ PByte)
Habe während der Übersetzung mehrere solche Stellen gehabt und werde vermutlich noch weitere finden, bevor alles übersetzt ist. Dieser Quelltext hier steht beispielhaft für die Problematik
Delphi-Quellcode:
function GetKeyboardShiftState: TShiftState;
type
PKeyState = ^TKeyState; //Auch mit dieser Defi
TKeyState = array[0..255] of byte;
var
State: PKeyState;
//State: array[byte] of byte; //Das war die Originale Definition
begin
Windows.GetKeyboardState(State); //Hier kommt der Compiler nicht weiter -> WARUM NICHT?????
//Auch mi8t der originalen Definition von State kommt der Compiler hier nicht weiter!!!
//Deshalb habe ich einen TKeyState/TKeyState-Typ definiert, in der Hoffnung, das der Compiler
//das schluckt. Klappt aber nicht
Result := [];
if (State[VK_SHIFT] and 128) <> 0 then
Include(Result, ssShift);
if (State[VK_MENU] and 128) <> 0 then
Include(Result, ssAlt);
if (State[VK_CONTROL] and 128) <> 0 then
Include(Result, ssCtrl);
if (State[VK_LBUTTON] and 128) <> 0 then
Include(Result, ssLeft);
if (State[VK_RBUTTON] and 128) <> 0 then
Include(Result, ssRight);
if (State[VK_MBUTTON] and 128) <> 0 then
Include(Result, ssMiddle);
if (State[VK_CAPITAL] and 1) <> 0 then
Include(Result, ssCaps);
if (State[VK_NUMLOCK] and 1) <> 0 then
Include(Result, ssNum);
if (State[VK_SCROLL] and 1) <> 0 then
Include(Result, ssScroll);
end;
Wer kann mir hier helfen? Gibt es für das
WinAPI einen richtig sicheren Weg, solche Parameterprobleme zu umschiffen???
ein verzweifelter
schöni
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.