AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dll zur Laufzeit verändern?

Ein Thema von StanY · begonnen am 27. Okt 2004 · letzter Beitrag vom 9. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2      
StanY

Registriert seit: 6. Aug 2004
145 Beiträge
 
#1

Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 15:25
Also: Ich 'arbeite' grade an einem kleinem IRC Bot. Soweit läuft alles auch ganz gut, mal abgesehen, dass er recht groß ist, da ich noch nicht non-vcl schreiben kann. Aber das ist erstmal egal.

Relevant ist, dass ich ihn nun DLL basiert erstellt habe. Der Bot läuft und greift bei jeder Msg, die ankommt, auf die DLL zu und überprüfr ob und wenn ja, was zu tun ist.

Nun hatte ich mir das eigentlich so vorgestellt, dass ich die DLL während der Laufzeit des Bots einfach austauschen kann, ohne, dass der Bot neu zum IRC connecten muss, was ja vorher noch der Fall war.
Gedacht, getan, nur leider kann ich die DLL nicht austauschen, 'da sie von einem anderen Programm benutzt wird'.

Wie kann ich das, was ich vor habe, realisieren?

Vielen Dank schonmal im Vorraus.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 15:28
Das Stichwort hier wäre "dynamisches Laden". So kannst du sie auch wieder, im Betrieb, entladen, austauschen und wieder anpappen. Dazu habe ich mal ein Tut auf www.delphi-treff.de oder auf www.delphi-source.de gesehen. (Einfach mal suchen )

Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
StanY

Registriert seit: 6. Aug 2004
145 Beiträge
 
#3

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 15:29
Mh danke. Habe mir das Tutorial dazu durchgelesen (schon gestern) aber dachte es wäre auch einfacher möglich^^. Dann mache ich mich mal daran, das nochmal zu tun \:.

Danke.
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#4

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 15:30
Hallo,

Solange die DLL geöffnet ist, kannst du sie nicht ersetzen (geschweige denn würde der neue Code ausgeführt werden können).

Mach in deinem Bot eine Schnittstelle über die man sagen kann "entlade-die-dll", dann wird sie ersetzt und dann kommt ein neues Kommando "lade-die-dll". Die schnittstelle könnte einen named pipe sein oder er hört auf einem lokalen UDP-Socket - das ganze wird dann einfach mit nem Hilfsprogramm angesteuert.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 15:31
Warum ist alles, was man auf Anhieb nicht versteht gleich schwer und es wird nach einer "einfachheren" Möglichkeit gesucht? Da mus sman sich eben mal damit etwas auseinadersetzten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
StanY

Registriert seit: 6. Aug 2004
145 Beiträge
 
#6

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 16:11
Ich habe die DLL jetzt dynamisch eingebunden, aber sobald die Prozedur in der DLL ausgeführt wird, bekomme ich ein AccessViolation-Error

Die Prozedur LoadDll(DllName: String); wird inFrom1.Create aufgerufen.
Delphi-Quellcode:
procedure TfrmMain.LoadDll(DllName: String);
var
  Handle: THandle;
begin
  //Dll wird nun eingebunden
  Handle := LoadLibrary(PChar(DllName));
  if (Handle <> 0) then begin
    GetCommand := GetProcAddress(Handle,'GetCommand');
  end;
  FreeLibrary(Handle);
end;
GetCommand wird global deklariert und zwar als TGetCommand, welches so aussieht:
TGetCommand = procedure(CmdStr: String; SockId: Integer); stdcall; Sobald ich GetCommand(); aufrufe, gibt es den Fehler. Folglich wird wohl etwas bei LoadDll nicht stimmen, aber was?

Btw.:
Die Dll sieht so aus:
Delphi-Quellcode:
library commdll;

uses
  SysUtils,
  Classes,
  Dialogs;

{$R *.res}

procedure GetCommand();
begin
  ShowMessage('yes');
end;

exports
  GetCommand;

begin
end.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 16:12
So müsste es gehen:
Delphi-Quellcode:
library commdll;

uses
  SysUtils,
  Classes,
  Dialogs;

{$R *.res}

procedure GetCommand(CmdStr: String; SockId: Integer); stdcall;
begin
  ShowMessage('yes');
end;

exports
  GetCommand;

begin
end.
  Mit Zitat antworten Zitat
StanY

Registriert seit: 6. Aug 2004
145 Beiträge
 
#8

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 16:22
Leider immer noch nicht \:.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 16:30
Da fällt mir grade ein: Strings dürfen einer DLL nicht direkt übergeben werden, sondern nur als PChar, oder durch einbindung von ShareMem. Versuch' mal eines von beiden...
  Mit Zitat antworten Zitat
StanY

Registriert seit: 6. Aug 2004
145 Beiträge
 
#10

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 16:37
Ich habe es nun so gemacht, dass gar nichts übergeben oder verlangt wird. Selber Fehler beim Aufrufen der Dll-Prozedur. \:
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:42 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