Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dynamisches Laden von DLL Dateien [PROBLEM] (https://www.delphipraxis.net/82676-dynamisches-laden-von-dll-dateien-%5Bproblem%5D.html)

Hybrid666 17. Dez 2006 22:13


Dynamisches Laden von DLL Dateien [PROBLEM]
 
So ich habe folgendes Problem:

Ich schreibe ein Programm das "Plugins" in form von libarys nutzt, wenn eine solche libary geladen wird (durch auswahl in einer liste), so wird in der DLL die function GetDllInfo aufgerufen um die funktionen der DLL zu erhalten.

Wenn ich dies nun tue mit folgendem Code:
Delphi-Quellcode:
procedure TForm1.cbgroupChange(Sender: TObject);
type TDllFunc = function(): string;
var
  i: integer;
  s: string;
  DLLHandle: THandle;
  func: TDllFunc;
  t: PChar;
begin
  cbcommand.Clear;
  DLLHandle := LoadLibrary(PChar('Plugins\' + cbgroup.text + '.dll'));
  if DLLHandle >= 32 then
  begin
    @func := GetProcAddress(DLLHandle, 'DLLGetInfo');
    if Assigned(func) then s := func();
  end;
  ShowMessage(s);
  FreeLibrary(DLLHandle);
end;
(Das ShowMessage ist zu testzwecken da)

Dann wird das was kommen soll per Showmessage richtig ausgegeben, dannach erhalte ich aber einen Error:
INVALID POINTER OPERATION und der fehler wird an der stelle FreeLibrary(DLLHandle); angezeigt...wenn ich nun aber nichts in der liste wähle (also KEINE dll wird geladen) so bekomme ich beim beenden des programmes den selben error....woran kann das nun liegen??

ICH BEDANKE MICH IM VORRAUS FÜR ALLE ANREGUNGEN UND FÜR JEDE HILFE

MfG Hybrid666

Hybrid666 17. Dez 2006 22:24

Re: Dynamisches Laden von DLL Dateien [PROBLEM]
 
habe das problem gelöst ;)

ich schreibe hier einfach mal dei antwort falls einer das wie ich zum ersten mal macht und nicht weiterkommt:

die problemlösung steht indirekt in der dll schon drin ;)

{ Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. }

ich habe sharemem an letzte stelle und nicht an erste gesetzt ;)

MfG Hybrid666

(kann closed werden)

Olli 19. Dez 2006 01:50

Re: Dynamisches Laden von DLL Dateien [PROBLEM]
 
Wenn du compiler-unabhängig arbeiten willst, benutz PChar und stelle in der DLL eine Funktion zum freigeben des Strings (i.e. PChar) bereit. Auch vielleicht was für dich: http://assarbad.net/de/stuff/tutorials/dll_tutorial/


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz