AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Procedure einer DLL zur Laufzeit ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Procedure einer DLL zur Laufzeit ändern

Ein Thema von Alex_ITA01 · begonnen am 4. Apr 2006 · letzter Beitrag vom 4. Apr 2006
Antwort Antwort
Alex_ITA01

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

Procedure einer DLL zur Laufzeit ändern

  Alt 4. Apr 2006, 10:07
Hallo erstmal,
ich hatte gestern schonmal angefangen mit dem Thema aber es war eine falsche Aussage von mir im Thread (RPC). Daher mache ich nochmal ein neues Thema auf und stelle die Frage richtig
Ich habe in meiner Anwendung ein Aufruf, der zu einer Procedure in DLL_1 führt.
Nun erkennt ich, dass in der Procedure ein Fehler ist und da ich nicht immer die komplette Anwendung neustarten kann und will, sage ich dem Programm "irgendwie", dass es jetzt die gleiche Procedure (mit der einen kleinen Änderung) nicht mehr aus DLL_1 nehmen soll, sondern aus DLL_2...
Ich hoffe ihr wisst was ich meine...
Wäre schön wenn mir jemand sagen könnte, wie ich soetwas realisiere.
MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Procedure einer DLL zur Laufzeit ändern

  Alt 4. Apr 2006, 10:13
Delphi-Quellcode:
if ergebnis_aus_dll = false
begin
  hLib := LoadLibrary(dll2);
  ...
Wo ist das Problem? Bis auf die Tatsache, dass du wohl masochistisch veranlagt bist und dir deine eigene DLL-Hell schaffst. Warum den Fehler nicht beheben und die gefixte DLL nutzen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Alex_ITA01

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

Re: Procedure einer DLL zur Laufzeit ändern

  Alt 4. Apr 2006, 10:43
nur zur Info: Natürlich lösche ich danach die nicht mehr benötigte DLL_1 damit nicht wie Luckie denkt, eine DLL-Hölle entsteht...
Danke trotzdem!
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Procedure einer DLL zur Laufzeit ändern

  Alt 4. Apr 2006, 11:04
Warum nicht ersetzen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Alex_ITA01

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

Re: Procedure einer DLL zur Laufzeit ändern

  Alt 4. Apr 2006, 11:05
oder eben ersetzen
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Procedure einer DLL zur Laufzeit ändern

  Alt 4. Apr 2006, 11:07
Und dann wird es doch überflüssig zu prüfen, ob die Funktion korrekt gearbeitet hat in der DLL.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
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, 11: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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Procedure einer DLL zur Laufzeit ändern

  Alt 4. Apr 2006, 11:23
Äh, guck dir mal deine Code genauer an. Das Handle der DLL legst du in der Variablen LibHandle ab (wo auch immer die deklariert ist, warum nicht lokal?). Aber bei GetProcAddress benutzt du das Handle deiner Form: Handle. Das dort die Funktion nicht gefunden wird, dürfte klar sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Alex_ITA01

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

Re: Procedure einer DLL zur Laufzeit ändern

  Alt 4. Apr 2006, 11:27
Sh... Ups...
Habe ich auch gerade gesehen.
Trotzdem Danke Luckie...
MFG Alex
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:03 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