AGB  ·  Datenschutz  ·  Impressum  







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

procedure in dll auslagern

Ein Thema von BastardOp · begonnen am 6. Jul 2005 · letzter Beitrag vom 6. Jul 2005
Antwort Antwort
BastardOp

Registriert seit: 5. Jun 2005
71 Beiträge
 
Delphi 7 Personal
 
#1

procedure in dll auslagern

  Alt 6. Jul 2005, 00:33
Hi

also ich hab gerade damit angefangen mit dlls zu arbeiten. Ich hab auch schon funktionen in die dlls gepackt und das funzt auch alles wunder bar. Aber nun wollte ich mal fragen ob ich auch proceduren in dlls auslagern kann und dann im Hauptprogramm nur noch aufführe in welche dll die procedure liegt und ein onclick ereignis dann zumbeispiel direkt aus der dll geladen wird. Das wäre bei mir sehr sinn voll da ich dann bei updates von meinem Programm nicht imer das gesamtte proggramm an alle user verteilen muss sondern nur die dlls mit den änderungen.

Ich hoffe mal ihr könnt mir helfen.

MfG
BastardOp
Alle Menschen sind Ausländer FAST ÜBERALL!!!
Alle Rassisten sind ARSCHLÖCHER ÜBERALL!!!
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: procedure in dll auslagern

  Alt 6. Jul 2005, 00:55
Warum nimmst du nicht Packages?
Das sind aufgebohrte DLLs, du kannst darin deine Klassen oder auch prozedurales Zeug packen.
Einfach die betreffenden Units aus dem bisherigen Projekt werfen und in das Package packen.
Dann noch dieses Package (und alle, die in der requires Liste des Packages aufgelisteten Packages) in den Projekt optionen bei runtime packages eintragen, fertig.
Dein Code wird dadurch nicht beinflusst. (Bis auf Kreuzbezüge, die bei zwischen Packages nicht erlaubt sind)
  Mit Zitat antworten Zitat
BastardOp

Registriert seit: 5. Jun 2005
71 Beiträge
 
Delphi 7 Personal
 
#3

Re: procedure in dll auslagern

  Alt 6. Jul 2005, 09:42
Also irgdwnwiekomme ich mit den Packeges nicht so wirklich zurecht. In den Proceduren wir bei mir auf Elemete eines Formular zugegriffen und diese Elemete sind in dem Package ja dann nicht drin und wie kann ich in meinem Hauptprogramm agen das halt das OnClick vonzb Button5 in dem Packge liegt?
Ich hab mir das so vorgestelle, das ich einfach meinen ganzen externen Datein ahbe und die darin liegenden Prozedure im Haupprogramm dan zb über
Delphi-Quellcode:
procedure Meine Procedure;
externen ' Meinendll.dll';
deklariere und den Inhalt der Prozeduren kan ich dann wie ich lustig bin in den exteren Datein ändern, ohne jedesmal das ganz Programm neu zu machen.
Alle Menschen sind Ausländer FAST ÜBERALL!!!
Alle Rassisten sind ARSCHLÖCHER ÜBERALL!!!
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#4

Re: procedure in dll auslagern

  Alt 6. Jul 2005, 10:25
File -> New -> Dll Library

Delphi-Quellcode:
library myProcedures;

uses
  Windows;

procedure myProcedureOne; stdcall;
begin
  MessageBox(0, 'myProcedureOne', 'w00t', MB_OK OR MB_ICONINFORMATION);
end;

extern
  myProcedureOne;

end.
--------------

in deinem programm das die dll laden soll

Delphi-Quellcode:
procedure LoadProcedureFromDll;
var
  hDll: cardinal;
  myProcedure: procedure;

begin
  hDll := LoadLibrary('myProcedures.dll');
  if hDll <> 0 then begin
    @myProcedure := GetProcAddress(hDll, 'myProcedureOne');
    if Assigned(@myProcedure) then
      myProcedure;
    FreeLibrary(hDll);
  end;
end;
  Mit Zitat antworten Zitat
BastardOp

Registriert seit: 5. Jun 2005
71 Beiträge
 
Delphi 7 Personal
 
#5

Re: procedure in dll auslagern

  Alt 6. Jul 2005, 10:32
irgendwie kanich dem ncith ganz folgen, muss ich da etwa für jede procedure in der dll den 2. code größenteils wieder holen? mir riechts wenn gleich zu anfrang alle proceduren der dll geladen werden
Alle Menschen sind Ausländer FAST ÜBERALL!!!
Alle Rassisten sind ARSCHLÖCHER ÜBERALL!!!
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#6

Re: procedure in dll auslagern

  Alt 6. Jul 2005, 10:46
Statt dem zweiten Teil kannst du auch
procedure myProcedureOne; stdcall; external 'myProcedures.dll'; verwenden.
Aber:
Beim Dynamischen laden, wie es oben beschrieben ist, kann ein Teil deines Programms noch funktionieren, auch wenn die DLL fehlt.
Beim statischen Aufruf, wie es die eine Zeile hier macht, geht dein Programm gar nicht mehr, wenn die DLL fehlt.
  Mit Zitat antworten Zitat
BastardOp

Registriert seit: 5. Jun 2005
71 Beiträge
 
Delphi 7 Personal
 
#7

Re: procedure in dll auslagern

  Alt 6. Jul 2005, 10:49
ok thx
ich wollte das proggie wenn ichs denn komplett auf die dlls umgestelt habe eh mit einen setup ausliefern und da sind ja dann die dlls bei

also thx für die hilfe
Alle Menschen sind Ausländer FAST ÜBERALL!!!
Alle Rassisten sind ARSCHLÖCHER ÜBERALL!!!
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#8

Re: procedure in dll auslagern

  Alt 6. Jul 2005, 10:58
wenn du die prozedurnamen kennst könntest du dir die LoadProcedureFromDll wie folgt umbauen

Delphi-Quellcode:
function InitDll(const sFileName: string): cardinal;
begin
  Result := LoadLibrary(sFileName);
end;

procedure FreeDll(iDll: cardinal);
begin
  FreeLibrary(iDll);
end;

procedure LoadProcedureFromDll(iDll: cardinal; const sProcedureName: string; var xProcedure: pointer);
begin
  xProcedure := GetProcAddress(iDll, sProcedureName);
end;

type
  TProcedureOne = procedure; stdcall;
  TProcedureTwo = procedure(iParam: integer); stdcall;

var
  hDll: cardinal;
  xProcedureOne: TProcedureOne;
  xProcedureTwo: TProcedureTwo;

procedure WireProcedures;
begin
  hDll := InitDll('myProcedures.dll');
  if iDll <> 0 then begin
    LoadProcedureFromDll(iDll, 'ProcedureOne', {@TProcedureOne(}xProcedureOne{)});
    LoadProcedureFromDll(iDll, 'ProcedureTwo', {@TProcedureTwo(}xProcedureTwo{)});
  end;
end;
  
procedure UnWireProcedure;
begin
  FreeDll(hDll);
  xProcedureOne := nil;
  xProcedureTwo := nil;
end;

procedure Test;
begin
  if Assigned({@}xProcedureOne) then
    xProcedureOne;
  if Assigned({@}xProcedureTwo) then
    xProcedureTwo(20);
end;
ich hoff ich hab jetz kein mist geschrieben
hab hier kein delphi zum testen.
  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 07:27 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