|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.05.2013, 00:31 | #1 |
Пользователь
Регистрация: 18.01.2009
Сообщений: 49
|
Error: regular procedure and method pointer
Использую D7. Есть код, перевод с С++
Если добавляю его в новый проект (temp-rabotaet.rar в аттаче), все компилируется и работает. Если добавляю в свое приложение - получаю ошибку компиляции. *О необходимости вызова функции в callback как static; читал, но D7 не поддерживает его (и работает без этого), в D XE3: [dcc32 Error] Unit1.pas(40): E2376 STATIC can only be used on non-virtual class methods. Код:
Последний раз редактировалось noname_06; 13.05.2013 в 01:03. |
13.05.2013, 09:56 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Код:
I'm learning to live...
|
13.05.2013, 13:58 | #3 |
Пользователь
Регистрация: 18.01.2009
Сообщений: 49
|
@LowLevelKeyboardProc пробовал, требует передать функции параметры, а что ей передавать то и не в курсе. Отдельно создавать функцию и отлавливать WPARAM и LPARAM? Непонятно, почему в пустом проекте работает, а в других не хочет.
|
14.05.2013, 21:22 | #4 |
Пользователь
Регистрация: 07.05.2013
Сообщений: 51
|
Код:
|
14.05.2013, 21:43 | #5 |
Пользователь
Регистрация: 07.05.2013
Сообщений: 51
|
если пишите в юните то ничего не меняется в порядке использования. объявлять в секции private ее не надо.
Последний раз редактировалось iworm2009; 14.05.2013 в 21:53. |
15.05.2013, 00:09 | #6 |
Пользователь
Регистрация: 18.01.2009
Сообщений: 49
|
Любопытненько, как это Delphi не опознал родную до мозга костей процедуру
В теории - да, на практике - как видите влияет. Пардон, а где тогда? Объявлять как public, или, может, как метод от TForm1? |
15.05.2013, 02:25 | #7 |
Пользователь
Регистрация: 07.05.2013
Сообщений: 51
|
1. выхлоп - это значит showmessage произошел
2. на практике ничего не поменял 3 в вашем нерабочем примере убрал из private, и поднял тело функции выше ее первого использования дописав stdcall; а и естесственно не LowLevelKeyboardProc а @LowLevelKeyboardProc ps. у вас есть рабочий пример, разве не видно разницы |
15.05.2013, 03:43 | #8 |
Пользователь
Регистрация: 07.05.2013
Сообщений: 51
|
если вам все таки оч надо функцию привязать к форме то вызов как то так
Код:
|
15.05.2013, 04:56 | #9 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
нельзя так, вызов метода отличается от вызова процедуры, ибо в первый передается Self
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
15.05.2013, 06:28 | #10 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Как уже сказали, выкинуть из методов формы вообще (ни private, ни public, просто в модуле положить, Вы ведь даже не обращаетесь к членам формы в функции), в старых дельфи нельзя использовать указатели на методы класса для передачи в винапи. После переброски функции в модуль использовать с @ или функцией Addr
Теория http://www.gunsmoker.ru/2008/12/static-delphi.html Последний раз редактировалось phomm; 15.05.2013 в 06:33. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Run-time error 1004: Method Range of object Global failed failed | sa920 | Microsoft Office Excel | 8 | 01.07.2012 22:40 |
Выдает ошибку [Error] Unit1.pas(46): Method identifier expected | ckbdf16 | Помощь студентам | 5 | 24.06.2011 09:22 |
[DCC Error] Project2.dpr(22): E2009 Incompatible types: 'method pointer and regular procedure' | TwiX | Общие вопросы Delphi | 1 | 15.02.2010 09:14 |
Ошибка [Error] UPER.pas(57): Incompatible types: 'Integer' and 'Pointer' | Pirotexnik | Общие вопросы Delphi | 4 | 27.03.2009 11:04 |