Здравствуйте всем.
Для работы многих программ требуются внешние частные dll-ки.Зачастую это упускается из виду и файл ЕХЕ копируется без нее.И даже в Интернете неопытные пользователи нередко дают на скачку только сами экзешники.Дабы такого не случилось с писаной мной програмой я решил пристыковать эту самую сопутствующую dll-ку к моему экзешнику,чтобы потом при запуске програма сама извлекла ее оттуда оттуда и сделала нормальным отдельным файлом в той же директории,что и экзешник.Код нашел в Интерете,он нетрудный.Но организовать сам процесс контроля наличия и создания внешнего файла оказался для меня не из простых.
Привожу часть кода.
program MyProg;
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
uses
{$IFNDEF FPC}
{$ELSE}
Interfaces,
{$ENDIF}
Forms,SysUtils,Dialogs,Classes, //здесь подключены модули,необходимые для работы нижеследующих процедур
Unit1 in 'Unit1.pas' {Form1}; а этот модуль,по сути сама моя программа,требует внешней MyProg.dll
{$R *.res}
{$R MyProg.RES}
//извлекаем MyProg.dll из ресурса
procedure DllFromRes;
var
MyDll1: TResourceStream;
begin
MyDll1 := TResourceStream.Create(hInstance,'M1','RCDATA');
try
MyDll1.SaveToFile('MyProg.dll');
finally
MyDll1.Free;
end; {try}
end;
begin
if not FileExists('MyProg.dll') then DllFromRes;//извлекаем из ресурса MyProg.dll
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Компиляция идет без проблем.Но когда запустить сам экзешник окно алерта пишет,что программа не может запуститься из-за отсутствия MyProg.dll
Я понимаю,прежде чем стартовать,программа проверяет наличие компонентов по-порядку для всех перечисленных модулей.И вот,не найдя этой самой dll-ки для модуля Unit1 выводит алерт и стопируется.До распаковки дело еще даже не дошло,хотя сама dll-ка спокойно сидит в ресурсах того самого экзешника.Думаю изложил все предельно ясно.
ВОПРОС: Уважаемые эксперты.Подскажите,а может и напишите кусочек кода,как выйти из ситуации.Нужно чтобы проверка на наличие внешней dll-ки и ее распаковка в файл начиналась прежде всех прочих проверок.Как быть?