Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамичесская загрузка ssleay32.dll и libeay32.dll, Проблема 
:(
    Опции темы
lollollollol
Дата 28.11.2013, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Здравствуйте. Моё приложение использует библиотеки ssleay32.dll и libeay32.dll.

Проблема в том, что если на компьютере нет этих dll, при запуске вылетает ошибка с оответствующим текстом (приложение не запущено т.к. нет длл, переустановите программу и т.д.)

Моя задача сделать так, чтобы программа вначале проверила наличие dll, и если их нет - скачала.

Для этого нужно динамичесски загрузить dllки.

Но вот незадача, в коде видно как используются функции тлько из одной dll, а для работы нужны обе!

Вырезка кода из Uses SSLSocket 
Ссылка где нашел модуль: http://forum.antichat.ru/showthread.php?t=145550
Код

implementation
 const SSL_LIB_NAME = 'ssleay32.dll';

function SSL_library_init:Integer; cdecl; external SSL_LIB_NAME;
function SSLv3_client_method:Pointer; cdecl; external SSL_LIB_NAME;
function SSL_CTX_new(meth: Pointer):Pointer; cdecl; external SSL_LIB_NAME;
function SSL_new(ctx: Pointer):Pointer; cdecl; external SSL_LIB_NAME;
function SSL_set_fd(s: pointer; fd: tsocket):Integer cdecl; external SSL_LIB_NAME;
function SSL_connect(ssl: pointer):Integer; cdecl; external SSL_LIB_NAME;
procedure SSL_free(ssl: pointer); cdecl; external SSL_LIB_NAME;
function SSL_read(ssl: pointer; buf: PChar; num: Integer):Integer; cdecl; external SSL_LIB_NAME;
function SSL_write(ssl: pointer; buf: PChar; num: Integer):Integer; cdecl; external SSL_LIB_NAME;





В Связи с этим 2 вопроса :
1. Функции которые динамичесски загрузятся из длл, автоматичесски загрузят всё что нужно из libeay32.dll?
2. Как сделать проверку, и импорт функций, если это используется в отдельном Uses? Хотелось бы при запуске проверить, в теле основной программы.
Или перефразирую: Импортирую из dll функции котрые описаны в USES, но ведь от туда они будут не доступны? или я ошибаюсь?
PM MAIL   Вверх
Akella
Дата 28.11.2013, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



Просто проверь наличие этих файлов в папке приложения, например.

Добавлено через 2 минуты и 50 секунд
Цитата(lollollollol @  28.11.2013,  20:59 Найти цитируемый пост)
Моя задача сделать так, чтобы программа вначале проверила наличие dll, и если их нет - скачала.


ну и try/except никто не отменял.

При скачивании обрати внимание на тот факт, что Windows может дать по зубам твоей программе, т.к. программа будет запущена из папки program files, поэтому на время скачивания нужно запросить повышение/поднятие прав у ОС, чтобы было можно сохранить файлы в program files.
PM MAIL   Вверх
Pseex
Дата 28.11.2013, 22:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.9.2008

Репутация: нет
Всего: нет



Цитата(lollollollol @  28.11.2013,  20:59 Найти цитируемый пост)
Моя задача сделать так, чтобы программа вначале проверила наличие dll, и если их нет - скачала.

Просто кинуть длл-ки в папку к ехе-шнику не проще, чем проверять и выкачивать?
PM MAIL ICQ   Вверх
Akella
Дата 28.11.2013, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



я всегда в установщик эти 2 файла "зашиваю"  smile 
PM MAIL   Вверх
Poseidon
Дата 28.11.2013, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Цитата(lollollollol @  28.11.2013,  20:59 Найти цитируемый пост)
Моя задача сделать так, чтобы программа вначале проверила наличие dll
Наличие проверяется функцией LoadOpenSSLLibrary из IdSSLOpenSSL. Ну а скачиваются они как обычные файлы из любого доступного источника.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
lollollollol
Дата 29.11.2013, 04:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Дак как я проверю наличие длл, если при запуске, в случае их отсутствия
ошибка:

Код

The program can't start because ssleay32.dll is missing from your
computer. Try reinstalling the program to fix this problem.


И эта ошибка выскакивает даже ДО выполниня первой строчки кода.

Программа пишется как сервер, не имеет визуальной оболочки. (один .dpr файл)
PM MAIL   Вверх
lollollollol
Дата 29.11.2013, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Есть варианты?

PM MAIL   Вверх
Poseidon
Дата 29.11.2013, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



В таком случае создай условия, гарантирующие наличие этих баблиотек. К примеру методом, предложенным Akella


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Dik0n
Дата 29.11.2013, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 11.5.2011

Репутация: 1
Всего: 10



В чем проблема то вообще ?

Код

implementation
  const SSL_LIB_NAME = 'ssleay32.dll';
var
  SSL_library_init: function():Integer; cdecl;

h := LoadLibrary(SSL_LIB_NAME);

if h <> 0 then
begin
  @SSL_library_init := GetProcAddress(h, 'SSL_library_init');
  ...
  ...
end else
  // download...

--------------------
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ◄◄◄ Сотри монеткой защитный слой
PM MAIL WWW   Вверх
lollollollol
Дата 30.11.2013, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



А вариант с динамической загрузкой?

Цитата

В Связи с этим 2 вопроса :
1. Функции которые динамичесски загрузятся из длл, автоматичесски загрузят всё что нужно из libeay32.dll?
2. Как сделать проверку, и импорт функций, если это используется в отдельном Uses? Хотелось бы при запуске проверить, в теле основной программы.
Или перефразирую: Импортирую из dll функции котрые описаны в USES, но ведь от туда они будут не доступны? или я ошибаюсь? 

PM MAIL   Вверх
lollollollol
Дата 30.11.2013, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Цитата

В чем проблема то вообще ?



Точно, не думал что прям в uses можно
PM MAIL   Вверх
lollollollol
Дата 30.11.2013, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



только остался один вопрос, как из USES добраться до константы основной программы?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0834 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.