Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Ф-ция из DLL в зависимости от версии Дельфи [XP]


Alex_C   (31.07.17 09:00

Суть проблемы:

const
 WINSOCK2_DLL    = 'ws2_32.dll';

function inet_pton; external WINSOCK2_DLL Name 'inet_pton';

В Win7 эта функция в ws2_32.dll есть, а в XP - нет. Есть ли возможность определить эту функцию так, чтоб если программа запускалась под Win XP эта функция не инициализировалась из DLL?


Игорь Шевченко ©   (31.07.17 09:08[1]

LoadLibrary + GetProcAddress


rrrrr ©   (31.07.17 09:10[2]

+ if then else


Alex_C   (31.07.17 09:12[3]

LoadLibrary - с этим то понятно. А вот именно так никаких директив нет?)))


Alex_C   (31.07.17 09:14[4]

Т.е. понятно - это не директива должна быть компилятору, это уже директива в момент выполнения программы.


rrrrr ©   (31.07.17 09:15[5]

какие тебе директивы? ты секретарь райкома что ли?

если гетпроцаддресс не нашел функции то не используй функцию
и пофик какая там винда сейчас


Alex_C   (31.07.17 09:16[6]

То rrrrr: я вроде уже написал, что про GetProcAddress я и сам знаю. Хотел узнать, есть ли другие варианты.


rrrrr ©   (31.07.17 09:25[7]

какие еще варианты узнать, что нужной функции в длл нет кроме гетпроцаддресс:

у мамы спросить.


Юрий Зотов ©   (31.07.17 10:17[8]

Так что нужно определить - версию Delphi (как сказано в заголовке вопроса), или версию Windows (как сказано в самом вопросе)?

Если первое, то см. сюда:
https://gist.github.com/fabriciocolombo/2485849

А если второе, то GetProcAddress как раз и дает такую "директиву времени исполнения".


Rouse_ ©   (31.07.17 10:27[9]


> какие еще варианты узнать, что нужной функции в длл нет
> кроме гетпроцаддресс:

ну через Delayed можно, но смысл? Через GetProcAddress гораздо быстрее.
http://docwiki.embarcadero.com/CodeExamples/Berlin/en/DelayedLoading_%28Delphi%29


blah-blah-blah   (31.07.17 16:19[10]

const
WINSOCK2_DLL = 'ws2_32.dll';

type
 t_inet_pton = function(af: Integer; src: PChar; dst: Pointer): Integer;

var
 func_inet_pton: t_inet_pton = nil;

function inet_pton(af: integer; src: pchar; dst: pointer): integer;
var
 LLib: THandle;
begin
 if not Assigned(func_inet_pton) then
 begin
   LLib := LoadLibrary(WINSOCK2_DLL);
   if LLib > 0 then
     func_inet_pton := GetProcAddress(LLib, 'inet_pton');
 end;

 if Assigned(func_inet_pton) then
   Result := func_inet_pton(af, src, dst)
 else
   Result := -2; // Error code 'No Lib / No Func'
end;


rrrrr ©   (31.07.17 16:58[11]

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


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо