2016-06-28 12 views
1

Ich musste den Quellcode von Inno Media Player 0.03 kompilieren, der von mir modifiziert wurde, um ihm mit Delphi eine Cursorverdeckungsfunktion hinzuzufügen.Inkompatible Typen "LongBool" und "Integer"

habe ich den Code an die Quelle erfolgreich und versuchte erneut zu kompilieren, aber der Compiler sagt:

[DCC32 Error] MainUnit.pas (154): E2010 Inkompatible Typen: 'LongBool' und 'Integer'.

Was ist das Problem in diesem Code?

Der Code, den ich zu INNO MEDIA PLAYER hinzugefügt:

const 
    OATRUE = -1; 

procedure TDirectShowPlayer.InitializeVideoWindow(WindowHandle: HWND; var Width, 
    Height: Integer); 
begin 
    ErrorCheck(FGraphBuilder.QueryInterface(IVideoWindow, FVideoWindow)); 
    ErrorCheck(FVideoWindow.HideCursor(OATRUE));  **<<<ERROR IS HERE<<<** 
    ... 
end; 

Ich rief die IVideoWindow::HideCursor Methode auf dem FVideoWindow im TDirectShowPlayer.InitializeVideoWindow.

OATRUE Die Konstante ist eine System.ShortintIVideoWindow.HideCursor und ist ein LongBool Methode.

Sind diese inkompatiblen Typen oder ist meine Version von Delphi nicht kompatibel mit diesem Code, den ich hinzugefügt habe?

Antwort

3

Nach DirectShow documentation on IVideoWindow::HideCursor Methodensignatur ist:

HRESULT HideCursor(
    [in] long HideCursor 
); 

während entsprechende Signatur in Progdigy Pascal Übersetzung ist:

function HideCursor(HideCursor: LongBool): HResult; stdcall; 

So, Während Ihr Code absolut der MS-Spezifikation entspricht, müssen Sie sich irgendwie mit der falschen Typ-Deklaration befassen. Sie benötigen eine Konstante deklarierte Typ typisieren:

ErrorCheck(FVideoWindow.HideCursor(LongBool(OATRUE))); 

Anmerkung: nur auf der Durch True-HideCursor könnte auch funktionieren, vorausgesetzt Direct genauen Werte nicht empfindlich ist. Verwenden Sie mit Vorsicht.

+0

Jetzt ist der Fehler verschwunden und ich kompiliert erfolgreich.Vielen Dank. Aber ich bin überrascht, warum sich mein Mauszeiger immer noch nicht vor Video versteckt? –

+2

Sie sollten eine der Antworten als richtig auswählen, obwohl sie beide dasselbe sagen. Ihr sichtbarer Cursor ist ein anderes Problem, das in der Frage nicht wirklich behandelt wird. :) –

4

auf MSDN, IVideoWindow.HideCursor() wird erklärt, wie ein long als Eingabe nehmen, keine BOOL, so dass es nicht als LongBool in Delphi erklärt werden sollte, soll es Longint stattdessen sein. Also entweder die Erklärung beheben, oder eine Typumwandlung verwenden:

ErrorCheck(FVideoWindow.HideCursor(BOOL(OATRUE))); 
Verwandte Themen