Witam. Biorąc czysto z kompendium przykład zrobiłem takie coś w stylu pluginów, z listy ładuje dynamicznie bibliotekę i wywołuje funkcje rejestracyjną.
procedure TForm1.LoadPluginDll;
var
DLL : THandle;
PluginLibrary : procedure;
NameLib: String;
F:TextFile;
begin
AssignFile(F,ExtractFilePath(Application.ExeName) + 'Lib\Plugins.lib');
Reset(F);
while not eof(F) do begin
ReadLN(F,NameLib);
if (NameLib <> '') AND (FileExists(ExtractFilePath(Application.ExeName)+'Lib\Plugins\'+NameLib)) then
begin
DLL := LoadLibrary(PChar(ExtractFilePath(Application.ExeName)+'Lib\Plugins\'+NameLib)); // załadowanie pliku
try
@PluginLibrary := GetProcAddress(DLL, 'registry'); // pobranie wskaźnika do procedury
if @PluginLibrary = nil then raise Exception.Create('Błąd w bibliotece: '+NameLib);
PluginLibrary; // wykonanie procedury
finally
// FreeLibrary(DLL);
end;
end;
end;
end;
Wywołuje procedurę z bibliotek którą załadował ale mam problem bo nie wiem gdzie i jak odczytać pakiet który wysłała dllka
w dll mam
RegCompiler = packed record
Name :String[32];
CompilerTitle :String[64];
OptionsTitle :String[64];
end;
ComponentInfo = ^RegCompiler;
procedure registry(RegInfo:ComponentInfo); stdcall;
begin
with RegInfo^ do begin
Name := 'NASM';
CompilerTitle := 'Asmbler';
OptionsTitle := 'Kompilator Asmbler';
end;
end;
To taki pierwszy raz z zabawami na dynamicznych bo z statycznymi nie mam problemów.
i to samo z wysyłaniem pakietu danych do biblioteki.
Będę wdzięczny za pomoc lub jakieś inne wskazówki