| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Получить адрес функции у класса |
| Автор: Ak47black 1.12.2007, 16:03 | ||
| Здравствуйте. Меня интересует как правильно получить адрес функции у класса. (Я хочу потом использовать функцию у класса как CallBack_function, поэтому для этого мне нужно получить адрес) Например вот такой код
Подскажите пожалуйста как тут правильно сделать? |
| Автор: Alexeis 1.12.2007, 16:23 |
| Можно присвоить метод переменной типа метод, а потом извлечь адрес функции. |
| Автор: Ak47black 1.12.2007, 16:41 | ||||
| Alexeis, ага так вышло. Ну всетаки почему напрямую нельзя получить, то до меня недоходит Добавлено @ 16:53 Alexeis, а такой код который ниже реально сделать вообще?
waveOutProc - функция принадлежащая классу. При выполнении получаю ошибку
Пытаюсь процедуру обработки привязать к классу |
| Автор: MetalFan 1.12.2007, 21:26 |
| низя метод назначить в кач.колбэка апи функции |
| Автор: Alexeis 1.12.2007, 22:18 |
Почему? Метод фактически не отличается от функции. Есть свои особенности, метод реализуется как функция. |
| Автор: OdesitVadim 1.12.2007, 23:15 |
| Вся загвоздка в том, что в методах есть неявный параметр, токорый указывает на объект. Вам то это не видно, а линковщик, когда собирает, обнаруживает несоответсвие параметров. |
| Автор: Ak47black 1.12.2007, 23:27 |
| Хмм поэтому. Вообщем у меня у цель, то сделать класс, при использовании которого, каждый экземпляр которого имел-бы свою CallBack функцию и проигровали звук независимо друг от друга. Как-бы тут сделать может какие идеи есть? |
| Автор: Ak47black 2.12.2007, 11:35 | ||||
Alexeis, с этим то кодом Erorr у меня выходит
С такими параметрами и недолжно работать по идее.
|
| Автор: Alexeis 2.12.2007, 14:20 |
Ну я понадеялся, что хватит сообразительности вместо пустых параметров поставить реальные |
| Автор: Ak47black 2.12.2007, 14:58 |
| Alexeis, а мне кажется что error изза того что стёк портится. Добавлено через 2 минуты и 41 секунду При вызове waveOutProc все параметры сдвинуты на 1 влево. Добавлено через 3 минуты и 47 секунд И эррор появляется только после первого выполнения waveOutProc. |
| Автор: Ak47black 2.12.2007, 15:37 | ||||||
| Хотя вроде нет Вот так вызов происходит в Winmm.dll
А вот сама пустая процедура CallBack
Чтото я запутался тут Какиенибудь идеи есть? И еше при вызове WaveOutOpen, парметры ненужно смешать, я пробовал waveOutProc как внизу
waveOutProc вызывается один раз, после прохождения получаю error :| |
| Автор: Alexeis 2.12.2007, 17:31 |
| Епрст ну что за 0! я же говорил там должен быть указатель на класс! |
| Автор: Ak47black 2.12.2007, 18:37 |
| Эммм это в моем случае 0? Где? |
| Автор: Ak47black 2.12.2007, 19:04 | ||
| Пытаюсь понять что именно вызывает ошибку чтобы както предотвратить. Покопав понял, что изза того что стек портиться прога прыгает(возвращается) на 00000000 адрес
Я предполагаю что вот этот лишний параметр както его и портит, только как? |
| Автор: Alexeis 2.12.2007, 19:50 |
| WaveOutOpen(@hwo, WAVE_MAPPER, @wfx, Cardinal(@PWaveOutProc), 0, CALLBACK_FUNCTION); сразу за PWaveOutProc |
| Автор: Ak47black 2.12.2007, 20:12 | ||||||||
Тут просто неудачно назвал код то такой вышел у меня
Добавлено через 13 минут и 14 секунд При выполнении этого кода получаю один вызов Self.WaveOutProc (это CallBack функция) с параметрами
Как видно 955 должно быть у uMsg, а не у hwo. 955 соотвествует MM_WOM_OPEN. Шас после двойного вызова Self.WaveOutProc получаю ошибку
|
| Автор: Alexeis 2.12.2007, 20:49 |
| Cardinal(@Self) - не нужно брать адрес. Self и так адрес Добавлено через 54 секунды Ak47black, приатач тестовый проект, проще будет разобраться. |
| Автор: Ak47black 2.12.2007, 20:53 |
| Alexeis, лан тут наверно нереально сделать. Попробую через по другому какому-нибудь пути сделать, спасибо всем за участвие. |
| Автор: Alexeis 3.12.2007, 14:56 | ||
Если так быстро будешь сдаваться, то плохой из тебя выйдет программист. Вот полностью рабочий код
|
| Автор: Ak47black 3.12.2007, 17:06 |
| Ёмаё @ ненадо оказывается. Спасибо тебе большое, я уже думал что просто неподерживается просто с классами. |
| Автор: Ak47black 3.12.2007, 17:41 | ||
Хмм ты еше и
Поменял. |
| Автор: Alexeis 3.12.2007, 17:50 |
| Да чтобы не нужно было сдвигать параметры. |
| Автор: Ak47black 3.12.2007, 18:01 |
| Надеюсь будет работать стабильно. |
| Автор: MetalFan 3.12.2007, 18:10 |
| Ak47black, а куда оно денеца? |
| Автор: Alexeis 3.12.2007, 18:24 |
| MetalFan, есть куда. Этот метод вызывается в чужом потоке, потому круг действий которые можно в нем производить ограничен, либо нужно синхронизировать, так что шанс заглючить еще есть |
| Автор: MetalFan 3.12.2007, 18:28 |
ого) пусть автор про это не забудет) |