|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.02.2009, 13:05 | #21 |
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
Я должен сделать универсально, а в runtime будут известны параметры, имена функций и имя dll файла.
и еще вопросик такой: что это за директива $METHODINFO такая? в справке нет, но делфи не ругается. недокументированная какая-то. Последний раз редактировалось Роман Радер; 19.02.2009 в 13:20. |
19.02.2009, 13:33 | #22 | ||
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
Цитата:
TMethodInfoHeader, TReturnInfo и TParamInfo. |
||
19.02.2009, 13:55 | #23 |
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
|
20.02.2009, 00:32 | #24 |
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
Вот подсказали:
Код:
я лично не очень понимаю что это правильно. |
20.02.2009, 01:00 | #25 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
Это универсальное решение, аргументы можно передавать любые. Принцип прост, в массив param кладутся все аргументы задом наперед и вызывается вот эта функция.
Код:
"Тяжело в учении, легко в бою" - А.В. Суворов
Последний раз редактировалось rpy3uH; 20.02.2009 в 08:34. |
20.02.2009, 01:07 | #26 | |
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
Цитата:
или нет? ЗЫ тоесть не в массив. просто в память. ведь каждый параметр разный размер имеет. Последний раз редактировалось Роман Радер; 20.02.2009 в 10:53. |
|
20.02.2009, 12:22 | #27 |
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
вроде-бы получилось этим способом.
люди добрые, скажите как в ассемблере передать не указатель на память, а содержимое?? а то хотя бы integer передается указателем. пока что я работаю с моделью stdcall. если все получится, продолжу с register, pascal и cdecl по этому-же принципу. Кстати, модель register не такая уже и непонятная. там первых 3 параметра заносятся в регистры eax,ebx,ecx, а остальные - в стек. правда, не знаю в каком порядке. Последний раз редактировалось Роман Радер; 20.02.2009 в 13:22. |
20.02.2009, 13:19 | #28 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Про стек не забывайте, при cdecl его чистит сама программа, при fastcall(он же register) функция
пыщь
Последний раз редактировалось JTG; 20.02.2009 в 13:23. |
21.02.2009, 13:27 | #29 |
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
Все! сделал, вроде работает. Осталось только выяснить как типы засовывать - по адресу или напрямую. об этом - ниже.
Сделал я так: (stdcall!) Код:
1) Какие типы нужно передавать по адресу, а какие - напрямую. (integer - я знаю точно, что напрямую и классы - по адресу. а остальные?). 2) Каким образом нужно "чистить стек"? |
21.02.2009, 16:24 | #30 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
Чистить стек можно с помощью любого регистра pop-ами, а можно сделать проще - просто сохранить esp где ни будь и восстановить. Вобще то любую переменную больше 4 байт обычно передают по адресу, так как она уже является массивом и считывать ее придется уже побайтово, тоесть инкрементируя адрес. Но я правда не уверен насчет языков высокого уровня, что там из себя представляют переменные. Я бы делал для надежности так :
int a; LEA eax,a mov ebx,[eax] ну это конечно утрировано, но зато надежно. mov ebx,[Param+ecx] mov ebx,[ebx] Вот в эту шаманскую песенку я не вкурил. [Param+ecx] это уже ваша переменная со смещением, двойное слово. Или там в param список адресов?
"Тяжело в учении, легко в бою" - А.В. Суворов
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание и вызов библиотеки dll | DM_bite | Помощь студентам | 3 | 15.06.2010 12:47 |
Вызов функции | MarSeON | PHP | 2 | 01.08.2008 20:22 |
вызов из dll не ShowModal. | Roof | Общие вопросы Delphi | 7 | 25.07.2008 15:22 |
Автоматический вызов функции класса | Flaton | Общие вопросы C/C++ | 4 | 19.10.2007 17:56 |
Вызов функции по таймеру | Lexicss | Общие вопросы Delphi | 4 | 30.05.2007 22:47 |