-
Суть проблемы:
const WINSOCK2_DLL = 'ws2_32.dll';
function inet_pton; external WINSOCK2_DLL Name 'inet_pton';
В Win7 эта функция в ws2_32.dll есть, а в XP - нет. Есть ли возможность определить эту функцию так, чтоб если программа запускалась под Win XP эта функция не инициализировалась из DLL?
-
LoadLibrary + GetProcAddress
-
+ if then else
-
LoadLibrary - с этим то понятно. А вот именно так никаких директив нет?)))
-
Т.е. понятно - это не директива должна быть компилятору, это уже директива в момент выполнения программы.
-
какие тебе директивы? ты секретарь райкома что ли?
если гетпроцаддресс не нашел функции то не используй функцию и пофик какая там винда сейчас
-
То rrrrr: я вроде уже написал, что про GetProcAddress я и сам знаю. Хотел узнать, есть ли другие варианты.
-
какие еще варианты узнать, что нужной функции в длл нет кроме гетпроцаддресс:
у мамы спросить.
-
Так что нужно определить - версию Delphi (как сказано в заголовке вопроса), или версию Windows (как сказано в самом вопросе)? Если первое, то см. сюда: https://gist.github.com/fabriciocolombo/2485849А если второе, то GetProcAddress как раз и дает такую "директиву времени исполнения".
-
-
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;
-
так-то любой дурак сможет через гетпроцаддресс. а ему хочется выпить рюмку чая не задействуя рот.
|