2016-06-28 4 views
1

Мне нужно было скомпилировать исходный код Inno Media Player 0.03, который был изменен мной, чтобы добавить к нему функцию Cursor Hiding с помощью Delphi.Несовместимые типы «LongBool» и «Integer»

Я добавил код источника и успешно пытался перекомпилировать но компилятор говорит:

[dcc32 Error] MainUnit.pas (154): E2010 Несовместимые типы: 'LongBool' и 'Integer'.

В чем проблема с этим кодом?

код я добавил INNO медиаплеера:

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; 

Я назвал IVideoWindow::HideCursor метод на FVideoWindow в TDirectShowPlayer.InitializeVideoWindow.

OATRUE Константа System.Shortint и IVideoWindow.HideCursor - это метод LongBool.

Являются ли эти несовместимые типы или моя версия Delphi несовместима с этим кодом, который я добавил?

ответ

3

Согласно DirectShow documentation on IVideoWindow::HideCursor сигнатуре метода является:

HRESULT HideCursor(
    [in] long HideCursor 
); 

в то время как соответствующие подписи в Pascal переводе Progdigy является:

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

Итак, в то время как ваш код абсолютно соответствует спецификации MS, вам нужно как-то разобраться с неправильным объявлением типа. Вы должны типаж вашего постоянного заявленного типа:

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

Примечания: проездом может также работать при условии, True к HideCursor DirectShow не является чувствительным к точным значениям. Используйте с осторожностью.

+0

Теперь ошибка исчезла, и я скомпилирован успешно. Большое вам спасибо. Но я удивлен, почему мой курсор мыши все еще не скрывается от видео? –

+2

Вы должны выбрать один из ответов как правильный, хотя они оба говорят почти то же самое. Ваш видимый курсор - еще одна проблема, на самом деле не затронутая вопросом. :) –

4

На MSDN, IVideoWindow.HideCursor() объявляется как взятие long в качестве входных данных, а не BOOL, поэтому она не должна быть объявлена ​​как LongBool в Delphi, она должна быть Longint вместо этого. Так что либо исправить декларацию, или используйте приведение типа:

ErrorCheck(FVideoWindow.HideCursor(BOOL(OATRUE))); 
Смежные вопросы