LINUX.ORG.RU

История изменений

Исправление xwicked, (текущая версия) :

Если пройтись по цепочки зависимостей (либы тоже могут дёргать функционал друг друга) то он всё равно станет непомерно жирным. Плюс ты можешь не знать, что действительно нужно, пока не запустишь свой код.

В коде чётко прописаны все либы и фукции используемые.

procedure Button1Click(Sender: TObject);
begin
  {"Чистим" адрес функции от "грязи"}
  @GetSimpleText := nil;
  {Пытаемся загрузить библиотеку}
  LibHandle := LoadLibrary('MYDLL.DLL');
  {Если все OK}
  if LibHandle >= 32 then begin
    {...то пытаемся получить адрес функции в библиотеке}
    @GetSimpleText := GetProcAddress(LibHandle,'GetSimpleText');
    {Если и здесь все OK}
    if @GetSimpleText <> nil then
      {...то вызываем эту функцию и показываем результат}
      ShowMessage(StrPas(GetSimpleText(True)));
  end;
  {И не забываем освободить память и выгрузить DLL}
  FreeLibrary(LibHandle);
end;
Нет ничего сложного рекурсивно пройтись по дереву исходников и скопировать все функции которые использует 'GetSimpleText' себе в проект, например и скомпилировать.Это напишется один раз и 20 лет можно будет использовать, а не придумывать изощрённые костыли. Размер ощутимо сократится всё равно и программа станет портабельна между всеми дистрибутивами от Fedora 1 и до сегодняшних дней.

Исходная версия xwicked, :

Если пройтись по цепочки зависимостей (либы тоже могут дёргать функционал друг друга) то он всё равно станет непомерно жирным. Плюс ты можешь не знать, что действительно нужно, пока не запустишь свой код.

В коде чётко прописаны все либы и фукции используемые.

procedure Button1Click(Sender: TObject);
begin
  {"Чистим" адрес функции от "грязи"}
  @GetSimpleText := nil;
  {Пытаемся загрузить библиотеку}
  LibHandle := LoadLibrary('MYDLL.DLL');
  {Если все OK}
  if LibHandle >= 32 then begin
    {...то пытаемся получить адрес функции в библиотеке}
    @GetSimpleText := GetProcAddress(LibHandle,'GetSimpleText');
    {Если и здесь все OK}
    if @GetSimpleText <> nil then
      {...то вызываем эту функцию и показываем результат}
      ShowMessage(StrPas(GetSimpleText(True)));
  end;
  {И не забываем освободить память и выгрузить DLL}
  FreeLibrary(LibHandle);
end;
Нет ничего сложного рекурсивно пройтись по дереву исходников и скопировать все функции которые использует 'GetSimpleText' себе в проект, например и скомпилировать.Это напишется один раз и 20 лет можно будет использовать, а не придумывать изощрённые костыли. Размер ощутимо сократится всё равно и программа станет портабельна между всеми дистрибутивами от Fedora 1 и сегодняшних дней.