Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2012, 15:43   #1
sexsex
Новичок
Джуниор
 
Регистрация: 24.02.2012
Сообщений: 7
По умолчанию DLL экспорт

Цитата:
Дpугой путь - экспоpтиpовать функцию по оpдиналу. Этот номеp уникален только для той DLL, на котоpую он ссылается. Hапpимеp, в вышепpиведенном пpимеpе, DLL может pешить экспоpтиpовать функцию чеpез оpдинал, скажем, 16. Тогда дpугая DLL/EXE, котоpая хочет вызвать эту функцию должна указать этот номеp в GetProcAddress. Это называется экспоpтом только чеpез оpдинал.
это значит если я экспортирую функцию в DLL через ordinal то если в еще одной exe/dll я хочу сделать тоже самое, надо все делать через GetProcAddress

т.е. в двух подключаемых dll нельзя делать таблицу импорта с одной и тойже функцией через ordinal ?

чето не пойму вобще ниче
sexsex вне форума Ответить с цитированием
Старый 24.02.2012, 17:04   #2
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

функции из DLL можно экспортировать по любому ординалу в диапазоне 1-65535.
Цитата:
Сообщение от sexsex Посмотреть сообщение
т.е. в двух подключаемых dll нельзя делать таблицу импорта с одной и тойже функцией через ordinal ?
е
можно
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Старый 24.02.2012, 17:16   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В ДЛЛ определен список функций, которых из нее можно вызвать. Ординалы функций, или точнее их порядковые номера - это порядковые номера этх функций в ДЛЛ.
Например ты экспортируешь функции
Код:
exports
 foo1;
 foo2;
 foo3;
Тогда компилятор поместит их в указанном тобой порядке друг за дружкой.
Разница в получении из ДЛЛ функции по ординалу от получения по имени заключается в том что указывая ординал ты фактически говоришь "обратись в массив функций по такому-то номеру"
Как будто бы твои функции компилятор помещал в Array[1..дофига] of function()
а программа импортер запрашивала foo:=Array[номер функции].
Фактически твоя прога (если таблица экспорта построена правильным компилятором) вычисляет адресс функции помножив ее ординал на 4 (если память не изменяет). Поэтому доступ по ординалу проходит быстрее.

Если же ты просишь функцию по имени, загрузчику приходится пройтись по всей таблице сравнивания описанные в ней имена с заданным тобой, как будто
Код:
for i:=0 to дофига do 
 if Array[i].NameFunction='foo1' then begin
   Вернуть Array[i].Адресс
   Закончить цикл.
 end;
Цитата:
т.е. в двух подключаемых dll нельзя делать таблицу импорта с одной и тойже функцией через ordinal ?
Можно только в том случае если ты уверен что номера этих функций в обоих ДЛЛ абсолютно одинаковы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.02.2012, 17:25   #4
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

а вообще, ординалы уже никто не использует. это рудимент оставшийся от старых программ и технологий. сколько видел программ и DLL, везде используется импорт по имени. ТС, можешь не париться, забудь про ординалы.
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Старый 24.02.2012, 19:18   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Если хочется досконально разобраться, можно почитать:
http://www.transl-gunsmoker.ru/2011/...ted-in-16.html
http://www.transl-gunsmoker.ru/2011/...ted-in-16.html
http://www.transl-gunsmoker.ru/2011/...ted-in-32.html
http://www.transl-gunsmoker.ru/2011/...re-really.html
http://www.transl-gunsmoker.ru/2011/...-resolved.html
http://www.transl-gunsmoker.ru/2011/...naive-way.html
http://www.transl-gunsmoker.ru/2011/...-imported.html
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 25.02.2012, 02:03   #6
sexsex
Новичок
Джуниор
 
Регистрация: 24.02.2012
Сообщений: 7
По умолчанию

Цитата:
Тогда дpугая DLL/EXE, котоpая хочет вызвать эту функцию должна указать этот номеp в GetProcAddress
а че это значит? дpугая DLL/EXE должна
sexsex вне форума Ответить с цитированием
Старый 25.02.2012, 12:14   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это значит что разработчик той DLL/EXE указывает что импорт будет по ординалу.
Забей на ординалы, это уже вышло из моды, и даже стало опасным занятием.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт из *.dll BingoBongo Общие вопросы Delphi 8 09.05.2011 13:28
Экспорт функции C++ в библиотеку DLL lebedevmd Фриланс 2 12.04.2011 14:45
Экспорт классов в DLL _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 16 17.11.2010 21:25
экспорт в dll varelik Общие вопросы Delphi 3 13.01.2010 11:30
экспорт классов из Dll Alar Общие вопросы Delphi 0 29.10.2006 21:53