Einzelnen Beitrag anzeigen

Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#7

Re: Procedure einer DLL zur Laufzeit ändern

  Alt 4. Apr 2006, 12:10
jup das stimmt

Ich habe aber noch eine kleine Frage zu dem Code:

Delphi-Quellcode:
unit UnitDLL_Laden;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type TSummenFunktion = function(zahl1, zahl2: integer): integer; stdcall;

type
  TForm1 = class(TForm)
    BtnLade_Neu: TButton;
    edtErgebnis: TEdit;
    BtnRechne: TButton;
    OpenDialog_DLL_Org: TOpenDialog;
    BtnOeffnen_Org_Org: TButton;
    BtnOeffnen_Neu: TButton;
    OpenDialog_DLL_Neu: TOpenDialog;
    BtnLade_Org: TButton;
    Update_Timer: TTimer;
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    LibHandle: THandle;
  public
    { Public-Deklarationen }
  end;
{---------------------------------------------------------------------------}
var
  Form1: TForm1;
{---------------------------------------------------------------------------}
implementation
{---------------------------------------------------------------------------}
{$R *.dfm}
{---------------------------------------------------------------------------}
procedure TForm1.FormCreate(Sender: TObject);
var
  SummenFunktion : TSummenFunktion;
  DLL_Name : String;
begin
  DLL_Name := 'DLL_Projekt.dll';

  LibHandle := LoadLibrary(PChar(DLL_Name));

  if Handle <> 0 then
  begin
    @SummenFunktion := GetProcAddress(Handle, 'addiere');
    if @SummenFunktion <> nil then
    begin
      edtErgebnis.Text := IntToStr(SummenFunktion(10, 20));
    end;
  end;
end;
{---------------------------------------------------------------------------}
procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeLibrary(LibHandle); // Free Memory Allocated for the DLL
end;
{---------------------------------------------------------------------------}
end.
//DLL
Delphi-Quellcode:
library DLL_Projekt;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der
  ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
  Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
  Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
  Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
  sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
  Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
  Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
  Informationen als PChar- oder ShortString-Parameter übergeben. }

  

uses
  SysUtils,
  Classes;

{$R *.res}

function addiere(zahl1, zahl2: integer): integer; stdcall;
begin
  result := zahl1 + zahl2;
end;

exports addiere;

end.
Irgendwie ist mein @SummenFunktion immer Nil?!?!
Habe ich mir im Tutorial von Delphi-Source angeguckt.
MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat