![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| marcusmae |
|
||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Привет, друзья,
кто знает, как задавать алиасы к именам функций? Допустим, у меня есть dll, экспортирующая функцию :
Эту dll нужно использовать в проекте на другом языке. Но некоторые компиляторы, например, Фортрана, умеют линковать только функции, именованые только строго UPPERCASE или строго lowercase, то есть описанная выше функция не прилинкуется. Можно, конечно, наплодить вызовов типа :
но как-то это диковато, правда? Это сообщение отредактировал(а) marcusmae - 2.11.2007, 22:40 -------------------- ἀπὸ μηχανῆς θεός |
||||||
|
|||||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
нет другого выхода нет -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Подумал, что это как-то делается, поскольку, как я понял, имя дающееся функции, это - фактически и есть алиас к Ordinal Value - функции в библиотеке нумеруются, и, видимо, возможно вызывать их прямо по этому номеру. Более того, некоторые функции иногда не имеют символьного имени, а только Ordinal Value!
Всё-таки, создание обёрток - это туча лишних джампов... Жаль. Спасибо. Это сообщение отредактировал(а) marcusmae - 2.11.2007, 22:51 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
единственный вариант, вручную создать элементы таблицы символов (т. е псевдонимы для нужной функции, которые будут ссылаться на нужную функцию) и соответствующие им элементы таблицы строк (по сути названия символов, т. е сами псевдонимы) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Хмммм... Ну да. Как в этой старинной статье RSDN рассматривалась подобная проблема, только в применении к ведущим андерскорам :
Надо думать, две функции имеют 1) разные псевдонимы 2) разные номера Ordinal (!), но для обеих в таблице установлен одинаковый адрес смещения. То есть, это действительно делается, но с использованием .def-файлов. Уже решение. А, может, можно без них? Помнится, производители компиляторов очень хвалились, что вот, def-файлы больше не нужны. Это сообщение отредактировал(а) marcusmae - 2.11.2007, 23:29 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
экспорты с редиректом/форвардом - не самые распространенные, и даже можно сказать - довольно экзотические случаи, посему затягивать их в синтаксис imho особого смысла не имеет. пользуй def'ы - наиболее простое и лаконичное решение.
|
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
marcusmae, бери пример с Микрософта: как они делают алиас GetWindowText на GetWindowTextA или GetWindowTextW? Макросами
(шутка... так делать не нужно) -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Ооо, да! В общем, более-менее ясно, что делать. Спасибо за Ваши ответы -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |