Вот со звуком надо бы поработать....

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Вот со звуком надо бы поработать....

Сообщение Vadim » 15.02.2019 15:18:34

kotompazb писал(а):LongInt" to "<procedure variable type

Когда Вы просто так запускаете функцию, Вы получаете тот тип, который в качестве ответа даёт выполнение функции. А Вам, видимо, нужно получить её адрес. Это очень большая и очень печальная проблема всех пользующихся сравнительно новым Дельфи - они всегда путают ответ функции и её адрес. У FreePascal такие проблемы выявляются ещё на этапе компиляции. Подставите операцию "адрес" - "@" и тип будет самый тот... ;-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Вот со звуком надо бы поработать....

Сообщение kotompazb » 15.02.2019 15:38:51

Дело в том что более старым компилятором оно компилировалось именно так, как мне подсказали в примере выше.
В таком виде:
Код: Выделить всё
PrevWndProc:=@(Windows.WNDPROC(SetWindowLong(Self.Handle,GWL_WNDPROC,PtrInt(@WndCallback))));

ругается уже так:
formaboutpas.pas(144,18) Error: Illegal type conversion: "LongInt" to "<procedure variable type of function(QWord;LongWord;Int64;Int64):Int64;StdCall>"
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Re: Вот со звуком надо бы поработать....

Сообщение Лекс Айрин » 15.02.2019 15:44:10

kotompazb, возможно, где-то в модулях поменялся режим компиляции. Вроде как в дельфовском режиме @ можно опустить.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Вот со звуком надо бы поработать....

Сообщение Vadim » 15.02.2019 16:43:13

kotompazb
А WndCallBack у Вас каким образом описано? Может там проблема?
Или может нужно попроще, типа что-то этого:
Код: Выделить всё
PrevWndProc:=@WndCallBack

?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Вот со звуком надо бы поработать....

Сообщение kotompazb » 15.02.2019 17:56:16

Код: Выделить всё
function WndCallback(Ahwnd: HWND; uMsg: UINT; wParam: WParam; lParam: LParam):LRESULT; stdcall;
begin
  if (uMsg = MM_MCINOTIFY) then
    if wParam = MCI_NOTIFY_SUCCESSFUL then
       mciSendString(PChar('play mySound from 0 notify'), nil, 0, FormAbout.Handle);

  result:=CallWindowProc(PrevWndProc,Ahwnd, uMsg, WParam, LParam);
end;


Добавлено спустя 1 минуту 12 секунд:
Вот так.
Ваще, думаю имеет смысл обновиться до последнее версии Lazarus, а то, возможно, придется снова решать решенную проблему.

Добавлено спустя 26 минут 39 секунд:
Ээээ. Ну в общем обновил Lazarus до 2, убрал собаку. Теперь все компилируется и даже работает :/ Я не знаю почему, но всем спасибо!

Добавлено спустя 2 минуты 23 секунды:
Появилась другая проблема, но с ней пойду в тему другую.
Аватара пользователя
kotompazb
постоялец
 
Сообщения: 151
Зарегистрирован: 21.06.2012 13:03:39
Откуда: Novosibirsk, xUSSR

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31

Рейтинг@Mail.ru