|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.02.2009, 19:47 | #11 | |
Форумчанин
Регистрация: 05.12.2007
Сообщений: 236
|
Цитата:
|
|
18.02.2009, 20:35 | #12 |
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
так в том и проблема что положить в стек нужно разные типы параметров и неизвестно как ложить разные типы.
и потом вызвать функцию. Код:
|
18.02.2009, 21:58 | #13 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Ну, положим это не проблема. Адрес по имени мы всегда сможем получить:
Код:
Цитата:
Только как Вы будете контролировать соответствие переданных параметров значениям, нужным в dll ?. Все равно придется обрабатывать какие-то заголовочные файлы. (Это, наверное, для использования API в Вашем языке ?) |
|
18.02.2009, 22:07 | #14 | |
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
Цитата:
да, вы правильно поняли. это для моего языка. не только для API, для поддержки сторонних функций кроме встроеных. с адресом функции действительно не проблема. с целыми числами - тоже. а вот с плавающей точкой и double - ужас один. как оно его в стек ложит?! там 4 push'a и последний - 1 байт какой-то. непонятно откуда берется. это для real. (смотрел CPU при трассировке) |
|
18.02.2009, 22:17 | #15 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
С double (для stdcall) особых проблем нет. Вот модель register, действительно непонятна. Вот здесь я выкладывал код для вызова метода с передачей параметров. Потом нашел вариант проще.
Код:
GetMethodInfo - возвращает структуру - описание параметров, возвращаемого значения и модели вызова. Вот эту часть нужно будет сделать из описания метода в dll. Дальше просто - передаем описание в invoke и метод выполняется. Там в исходниках видно как заполняется стек и делается вызов. В принципе, его можно просто подправить под вызов процедуры вместо метода объекта. Последний раз редактировалось alexBlack; 18.02.2009 в 22:22. |
18.02.2009, 23:27 | #16 | |
Форумчанин
Регистрация: 05.12.2007
Сообщений: 236
|
Цитата:
И зачем call name, если есть GetProcAddress |
|
18.02.2009, 23:45 | #17 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
В общем случае надо знать типы параметров. Например, вещественное число в array of const всегда будет extended, и уже нельзя будет узнать, передавать его функции как single, double или extended. Если известно, что параметры только, например, integer, double, boolean, char, pchar, то вроде никаких особых проблем не видно.
|
19.02.2009, 08:10 | #18 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
От проблему нашли, Рома, а не скажеш ли нам что это за ДЛЛ такая, что ну никак к ней не подступишся, а?
I'm learning to live...
|
19.02.2009, 12:07 | #19 | |||
Форумчанин
Регистрация: 16.12.2006
Сообщений: 859
|
Цитата:
Код:
Цитата:
Цитата:
|
|||
19.02.2009, 12:16 | #20 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
SDK на них есть?
I'm learning to live...
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание и вызов библиотеки 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 |