Я положил файл DLL в файл ресурсов (* .res)Загрузка DLL из ресурса непосредственно из памяти в Delphi 7
ProjectTestLibrary.dll
library ProjectTestLibrary;
uses SysUtils, Classes, Dialogs;
{$R *.res}
procedure DllMessage; export;
begin
ShowMessage('Hello world from a Delphi DLL');
end;
exports DllMessage;
begin
end.
MyTestDLL.rc
TestDLL RCDATA ProjectTestLibrary.dll
Produce MyTestDLL.res по этой командной строке
BRCC32 ProjectTestLibrary.rc
В основной форме
implementation
{$R *.dfm}
{$R MyTestDLL.RES}
procedure DllMessage; stdcall; external 'ProjectTestLibrary.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
DllMessage;
end;
Тогда ошибка выходит
Это приложение не удалось запустить из-за ProjectTestLibrary.dll не был найден.
Я понимаю, что проблема в том, что файл dll еще не существует.
Так что я удаляю 'DLLMessage;' код в onButton1Click.
Тогда onFormCreate, я добавил:
procedure TForm1.FormCreate(Sender: TObject);
var ms : TMemoryStream;
rs : TResourceStream;
begin
if 0 <> FindResource(hInstance, 'TestDLL', RT_RCDATA) then
begin
rs := TResourceStream.Create(hInstance, 'TestDLL', RT_RCDATA);
ms := TMemoryStream.Create;
ShowMessage('Found');
end else
begin
ShowMessage('Not Found');
end;
end;
я запустить его снова, то всплывающее сообщение сказал: «Найдено»
Мой вопрос тогда:
1. Как сохранить его в памяти (не в ПК жесткий диск), и, наконец,
2. использовать свои процедуры/функции (процедура DLLMessage)
Это не поддерживается операционной системой. Для этого требуется что-то вроде BTMemoryModule, которое может выйти из строя при будущих выпусках Windows. Он опирается на детали реализации. Антивирусное ПО, скорее всего, будет считать эту деятельность сомнительной. Всегда лучше отправлять DLL вместе с exe. –