AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi dll: procedure zur laufzeit einbinden
Thema durchsuchen
Ansicht
Themen-Optionen

dll: procedure zur laufzeit einbinden

Ein Thema von Dr.No · begonnen am 24. Mär 2006 · letzter Beitrag vom 26. Mär 2006
Antwort Antwort
Dr.No

Registriert seit: 18. Mär 2005
38 Beiträge
 
#1

dll: procedure zur laufzeit einbinden

  Alt 24. Mär 2006, 15:21
Also entweder bin ich doof oder, des stimmt einfach net:
Ich hab da schon in den tut nachgeschaut mit dan dlls, da steht ja drinn wie ich dlls zur laufzeit einbinde, aber bei mir tut des net!

bei den siht des so aus:

Delphi-Quellcode:
 
unit Unit1;

interface

uses windows;

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

implementation

function addieren(zahl1, zahl2: integer): integer;
var SummenFunktion: TSummenFunktion;
    Handle: THandle;
begin
  Handle:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'rechnen.dll'));
  if Handle <> 0 then begin
    @SummenFunktion := GetProcAddress(Handle, 'addiere');
    if @SummenFunktion <> nil then begin
      result:=SummenFunktion(zahl1, zahl2);
    end;
    FreeLibrary(Handle);
  end;
end;

end.
also des tat schonmal bei mir nich,
und wie soll des bei proceduren ausschauen?
wenn ich des am anfang lad tut bei mir die dll aber so halt net, und es isch dringend erforderlich das des dynamisch geladen wird!

also bei mir siht das so aus:
Delphi-Quellcode:
type
  Tinitform = function(owns:tcomponent;a:TwinControl):boolean; stdcall;
  function addieren(owns:tcomponent;a:TwinControl):boolean;

...

implementation

...
function addieren(owns:tcomponent;a:TwinControl):boolean;
var initform: Tinitform;
    Handle1: THandle;
begin
  Handle1:=LoadLibrary(PChar('./dlls\formcreate.dll'));
  if Handle1 <> 0 then begin
    @initform := GetProcAddress(Handle1, 'initform');
    if @initform <> nil then begin
    showmessage('c');
      result:=initform(owns,a);
    end;
    FreeLibrary(Handle1);
  end;
end;
wo bei die dll soaus siht:

Delphi-Quellcode:


...

var myform1:tform1;

function Initform(owns:tcomponent;a:TwinControl):boolean; stdcall;
begin

form1:=tform1.Create(application);
form1.Visible:=true;

result:=true;

end;

exports
  initform;

begin
end.

also ich bin da echt zu blöd des selbst hin zu bekommen,
wie gesgt wenn ihs am anfang ein binde tuts!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: dll: procedure zur laufzeit einbinden

  Alt 24. Mär 2006, 15:26
Erstmal solltest du dich entscheiden, ob du den Slash oder den Backslash als Trenner verwendest. Und dann ist es generell keine gute Idee mit VCL Objekten in DLLs zu arbeiten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dr.No

Registriert seit: 18. Mär 2005
38 Beiträge
 
#3

Re: dll: procedure zur laufzeit einbinden

  Alt 25. Mär 2006, 11:17
aha, tolle antwort!
die hilft mir sehr

1. es tut ja mit vcl!!
2. es liegt an der einbindung! weil wenn ichs am anfang lad tuts ohne probleme drotz vcl!
3. es is egal ob ich '/ oder \' benutz! hab ich schon getestet, und man kann auch beides im gleichen benutzen!


Hat noch jamand ne andere antwort, dann wäre ih euch sehr zu dank verpflichtet!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: dll: procedure zur laufzeit einbinden

  Alt 25. Mär 2006, 11:27
Zitat von Dr.No:
aha, tolle antwort!
die hilft mir sehr
Gut dann verabschiede ich mich mal aus dem Thread, wenn meine Hilfestellungen nicht erwünscht sind.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: dll: procedure zur laufzeit einbinden

  Alt 25. Mär 2006, 11:46
Zitat von Dr.No:
aha, tolle antwort!
die hilft mir sehr
Lucky hat vermutlich das Problem zu 100% getroffen wenn Du VCL-Objekte als Referenz in der DLL-Schnittstelle verwendest aber keine gemeinsamen Laufzeitpackages.
Im Forum sind genügen Diskussionen darüber und da kannst Du dich mal selbst schlau machen wenn Du Lösungsvorschläge nicht annimmst weil sie dir nicht passen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Dr.No

Registriert seit: 18. Mär 2005
38 Beiträge
 
#6

Re: dll: procedure zur laufzeit einbinden

  Alt 25. Mär 2006, 13:11
also, so war das ja jetzt nicht gemeint!

ABer warum tut es wenn ich es am anfang lade, aber wenn ich es dynamisch lade nicht?
gibts evtl noch ne andere möglichkeit des später zu ldaen, so dass man sich raussuchen kann welche dll man ladnen will?
DIe sache ist nähmlich für ein plug in system!
und da kann ich ja nicht schon vorher wissen wellche dlls ich gerade laden will, dann müsste ich ja in die exe schon vorher alle dlls eibinden, und dann ist es ja kein erweiterbares plug in system!
und um dieses plug in zu steuern brauch ich aber eine form!
die kann ich ja auch nicht in die exe machen, da ja jedes plug in eine andere steuerungs form brauch!

vileicht versteht ihr mich ja jetzt warum mir die antwort nicht vil nutzt!

also nochmal!
sorry luckie
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: dll: procedure zur laufzeit einbinden

  Alt 26. Mär 2006, 11:35
Du kannst auch mit der Hilfe von Packages ein Plugin-System (Hier im Forum suchenPackage Plugin). Und dann hast Du keine Probleme damit "lebende" Objekte von der Exe in die DLL's zu bringen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#8

Re: dll: procedure zur laufzeit einbinden

  Alt 26. Mär 2006, 13:19
Hi,

selbtverständlich kann man auch forms in eine dll verpacken.
Wird bei sehr großen kommerziellen Projekten gerne mal gemacht.

schau mal hier nach SwissDelphiCenter: Form aus einer DLL laden

da gibt es eine prima Anleitung.

Gruss

Thomas
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: dll: procedure zur laufzeit einbinden

  Alt 26. Mär 2006, 14:46
du schreibst immer nur "geht nicht". Was für ein Fehler erscheint denn? (hoffe ich hab das nicht einfach nur übersehen)

Ich vermute den Fehler hier:
Delphi-Quellcode:
GetProcAddress(Handle1, 'initform')
[...]
function Initform(owns:tcomponent;a:TwinControl):boolean; stdcall;
einmal schreibst du "initform" und das andere mal "Initform". Groß-/Klein-Schreibung wird bei GetProcAddress unterschieden!!! Das heißt du musst bei GetProcAddress die DLL genau mit dem gleichen Namen wie er in der DLL declariert ist aufrufen. Und "initform" <> "Initform"
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: dll: procedure zur laufzeit einbinden

  Alt 26. Mär 2006, 20:08
Zitat von thkerkmann:
selbtverständlich kann man auch forms in eine dll verpacken.
Wird bei sehr großen kommerziellen Projekten gerne mal gemacht.

schau mal hier nach SwissDelphiCenter: Form aus einer DLL laden

da gibt es eine prima Anleitung.
Da die Schweizer gerade bei mir nicht gehen kann ich nur spekulieren:
Geht es hier nur um den Aufruf eines unabhänigen Formulares aus einer DLL. Das ist absolut problemlos möglich. Auch das kein Extra-Icon in der Taskleiste erscheint is kein Problem. Aber hier geht es um das Problem das TObject aus der DLL <> TObject aus der Exe ist und damit alle is/as Vergleiche/Zuweisungen scheitern.
Windows Vista - Eine neue Erfahrung in Fehlern.
  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 08:22 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