AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Wie Funktion einer DLL hundertfach hintereinander aufrufen??
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Funktion einer DLL hundertfach hintereinander aufrufen??

Ein Thema von christian.noeding · begonnen am 9. Okt 2005 · letzter Beitrag vom 10. Okt 2005
 
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#1

Wie Funktion einer DLL hundertfach hintereinander aufrufen??

  Alt 9. Okt 2005, 18:11
Hallo,

Heute abend mal wieder eine DLL-Frage, da ich im Forum nichts passendes gefunden habe. Also: nachdem ich nun mit DLL-Programmieren und der dynamischen Einbindung derselben ein wenig Fuß gefasst habe, möchte ich eine bestimmte Funktion meines Programmes in eine DLL auslagern, damit man durch austauschen der DLL verschiedene Dinge mit den Parametern der Funktion anstellen kann, ohne das ganze Programm neu zu kompilieren (-> also eine Plugin-DLL)

Die DLL läuft soweit einwandfrei ohne ShareMem nur mit übergabe von PChars und mit Funktionsaufrufen über stdcall. Ich kann die DLL laden und auch die Funktionen und Forms laden, allerdings steigt mit jedem Funktionsaufruf die Speichermenge, die mein Programm verwendet und nach etlichen Aufrufen (>200) kratzt mir Delphi komplett mit Speicherfehlern ab (wahrscheinlich weil ich über meinen physikalischen RAM rausgehe)


Und das habe ich bisher programmiert:

Die DLL:

Delphi-Quellcode:
library pc_dimmer_com;

uses
  Forms,
  SysUtils,
  Classes,
  Windows,
  configfrm in 'configfrm.pas{Config},
  aboutfrm in 'aboutfrm.pas{About};

{$R *.res}

procedure DLLSenddata(address:integer; ftime:longint; level,st,fadetime_ms:integer);stdcall;
begin
  // hier der Funktionscode (der läuft ja, also lasse ich ihn hier weg)
end;

exports
  DLLSenddata;

begin
end.

und hier der Code, mit dem ich die DLL-Funktion aufrufe:

Delphi-Quellcode:
unit PCDimmer;

interface

uses
  {blablabla};

type
  TDLLSenddata = procedure(address:integer; ftime:longint; level,st,fadetime_ms:integer);stdcall;

  TMainForm = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm : TMainForm;
  OutputDLL: THandle;
  DLLSenddata:TDLLSenddata;

implementation

{$R *.DFM}

TMainform.button1click(Sender: TObject);
begin
  OutputDLL :=LoadLibrary(PChar('c:\meinplugin.dll'));
  @DLLSenddata := GetProcAddress(OutputDLL,'DLLSenddata');
end;

TMainform.scrollbar1change(Sender: TObject);
begin
  DLLSenddata(address,ftime,level,st,fadetime_ms);
end;

end.


Diesen Sourcecodeschnippsel habe ich jetzt eben aus meinem Hauptprogramm rausgeschrieben, ich hoffe ich habe nichts vergessen. Also ich lasse mir alle dll-Dateien in einem bestimmten Verzeichnis suchen und in einer Listbox anzeigen. Dann kann ich mit einem Button eine bestimmte Datei laden und die Funktion DLLSenddata mit der DLL-Funktion verbinden (Pointer setzen).

Wie gesagt, einige Male läuft die Funktion mit der Parameterübergabe, allerdings bereits nicht schnell. Ich hatte die DLL-Funktion DLLSenddata(...) vorher in der exe direkt drin und da flitzte die Funktion. Ausgelagert in der DLL schleicht die Funktion und frisst unmengen Speicher. Ich habe leider keine Ahnung, wo ich jetzt den Fehler suchen soll.


Vielleicht kann mir ja einer einen Tipp geben *g* Danke!


ciao, Christian
Christian Nöding
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz