Конференция "Начинающим" » Ф-ция из DLL в зависимости от версии Дельфи [XP]
 
  • Alex_C (31.07.17 09:00) [0]
    Суть проблемы:

    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]
    так-то любой дурак сможет через гетпроцаддресс.
    а ему хочется выпить рюмку чая не задействуя рот.
 
Конференция "Начинающим" » Ф-ция из DLL в зависимости от версии Дельфи [XP]
Есть новые Нет новых   [118684   +12][b:0][p:0.001]