Страница 1 из 1

Загрузка процедур, функций.

Добавлено: 15.12.2021 19:50:07
Seenkao
Есть различные способы объявления вызываемых процедур и функций. Например, такой:

Код: Выделить всё

function  glXCreateContext(dpy: PDisplay; vis: PXVisualInfo; shareList: GLXContext; direct: Boolean): GLXContext; cdecl; external libGL;

такой:

Код: Выделить всё

var
  glXCreatePbuffer: function(dpy: PDisplay; config: Integer; attribList: PInteger): GLXPBuffer; cdecl;

или вообще такой (а может быть ещё более замороченный):

Код: Выделить всё

const
  TglXCreatePbuffer: function(dpy: PDisplay; config: Integer; attribList: PInteger): GLXPBuffer; cdecl;
var
  glXCreatePbuffer: TglXCreatePbuffer;
// или в каком-нибудь таком варианте
  glXCreatePbuffer: function;

В первом случае, нам ни чего делать не надо, в двух других зачастую надо загружать адреса этих процедур и функций.

В чём собственно разница как я буду их загружать?

Re: Загрузка процедур, функций.

Добавлено: 15.12.2021 19:58:28
zub
1 - статический, адреса функций импортируются из libGL системой автоматически при запуске программы. при отсутствии libGL программа не запускается
2 - динамический, ты сам решаешь что откуда брать, сам разруливаешь наличие\отсутствие нужных библиотек. Пример - https://gitlab.com/freepascal.org/fpc/s ... /src/gl.pp

Re: Загрузка процедур, функций.

Добавлено: 15.12.2021 21:23:52
Seenkao
получается в одном случае без разницы. Но если мне нужно будет проверять загружаются ли эти процедуры/функции, то лучше использовать их динамическую загрузку?!

Re: Загрузка процедур, функций.

Добавлено: 15.12.2021 21:33:17
zub
Если твоя программа что-то должна работать в случае осутствия либ - динамически.
Статически только для тех либ что гарантировано есть в системе.

Re: Загрузка процедур, функций.

Добавлено: 16.02.2022 23:12:04
Seenkao
Статически загруженные библиотеки занимают меньше места. Соответственно размер программы меньше (для большинства не критично).