![]() |
|
![]() ![]() ![]() |
|
BaDP1nG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.11.2007 Репутация: нет Всего: нет |
Вкраце проблема: есть dll, которая экспортирует функцию. Так как необходимо, что бы данная dll могла без проблем быть использована не только в Борландовском с++ но и в Дельфи и MS C Studio использую соглашение вызова stdcall. В самой программе мне нужно задать свою обработку Application.onExcption. С модификатором closure я разобрался, создав структуру, в которую, кроме адреса функции передается еще и указатель this... Все работает, если используется fastcall у экспортированной функции, но совместимость страдает... При использовании stdcall куда-то пропадает параметр this, остальные параметры доходят... Очень странно, ведь порядок передачи параметров у fastcall и stdcall одинаков...
|
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
что за необходимость назначать обработчиком события функцию из библиотеки?! - пиши обычный обработчик и из него вызывай библиотечную функцию.
|
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
Код в студию
Вот у меня так передается this в dll void *arg
Это сообщение отредактировал(а) Dem_max - 13.10.2008, 12:56 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
BaDP1nG |
|
||||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.11.2007 Репутация: нет Всего: нет |
2 Dumd: Знаете, душа просит =)
2 Dem_max: Сомневаюсь, что это будет работать в Дельфи... Такое объявление в dll. Так как внутренний код нас не интересует, ибо теряется еще при передаче в функцию. Для понятности приведу два примера на onClick.
По идее порядок передачи параметров один... |
||||
|
|||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 18 Всего: 154 |
нельзя приводить указатель на функцию, к другому типу, как уже сказали - пиши враппер
|
|||
|
||||
BaDP1nG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.11.2007 Репутация: нет Всего: нет |
Почему же? Не по докам- согласен, но если оно работает...правда теряется один параметр... Можно написать обертку, конечно, но писать ее прийдется уже тому, кто будет интегрировать длл? Иначе опять же будет попытка экспорта fastcall. А если уж нагружать пользователя библиотеки- проще заставить уже запихать в обработчик onException невизуального компонета Application'а
|
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
fastcall отличается тем, что параметры, если это возможно, могут передаваться через регистры
![]() ЗЫ. Кстати, нечего было изобретать велосипед с THookMethod. Все уже изобретено до Вас. В билдере есть структура TMethod ![]() http://bcdev.narod.ru/Code.htm#GetProcName -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
BaDP1nG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 12.11.2007 Репутация: нет Всего: нет |
2 Вячеслав:Хм...благодарю! Простите уж, подход системного программиста... Расковыряли в отладчике, посмотрели как передается, да реализовали аналогию... Насчет передачи через регистры знаю, но один параметр из двух прекрасно достается сам, а вот второй теряется... под отладчиком я его, естественно нашел, но переписать на ассемблере- уже есть шаг от унификации
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |