AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ein Tabsheet aus einer DLL erzeugen in ein Pageconrol
Thema durchsuchen
Ansicht
Themen-Optionen

ein Tabsheet aus einer DLL erzeugen in ein Pageconrol

Ein Thema von Digielm · begonnen am 24. Sep 2009 · letzter Beitrag vom 25. Sep 2009
Antwort Antwort
Digielm

Registriert seit: 2. Aug 2006
246 Beiträge
 
Delphi 5 Enterprise
 
#1

ein Tabsheet aus einer DLL erzeugen in ein Pageconrol

  Alt 24. Sep 2009, 12:51
Hallo an alle,

ich stehe grade auf dem Schlauch.

Ich möchte gerne aus einer Programmunit einen Aufrufstarten, der aus einer DLL ein zusätzlich gebautes TTabsheet erzeigt und anzeigt.
Dieses soll dann in das Pagecontrol aus dem Hauptprogramm hinzugefügt werden.

Ich möchte eigentlich keine Funktion in die DLL packen, also nur das Tabsheet.

Wie bekomme ich das denn hin ?

Das Laden der Lib ist ja noch kein Problem, aber dann hab ich ja die Funktion
GetProcAddress
und vorher muß ich ja noch einen Type definieren, der auf die Funktion in die dll zeigt.

Hat jemand eine Idee wie ich das hinbekomme ??

Danke an alle
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: ein Tabsheet aus einer DLL erzeugen in ein Pageconrol

  Alt 24. Sep 2009, 13:26
Bedenke das das nur funktioniert wenn DLL und Exe mit der gleichen Compilerversion und aktivierten Laufzeitthemes kompiliert werden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Digielm

Registriert seit: 2. Aug 2006
246 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: ein Tabsheet aus einer DLL erzeugen in ein Pageconrol

  Alt 24. Sep 2009, 13:28
ja das ist mit schon klar.
Setze beidesmal Delphi 2009 ein.

Bleibt nur die Frage wie ich das Sourcetechnisch umsetzen kann.
  Mit Zitat antworten Zitat
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#4

Re: ein Tabsheet aus einer DLL erzeugen in ein Pageconrol

  Alt 24. Sep 2009, 14:47
Wenn deine Funktion z.B. "GetNewTab" heißen soll:

In der Dll:

Delphi-Quellcode:
  
exports
  GetNewTab;

function GetNewTab : TTabSheet;
{...}
In der App:

Delphi-Quellcode:
type
  TGetTab = function : TTabSheet;


var
  hLib : Cardinal;
  getTab : TGetTab;

procedure GetNewTabFromDll;
var
  sheet : TTabSheet;
begin
  hLib := LoadLibrary (LibPath);
  if hLib > 0 then
  begin
    getTab := TGetTab (GetProcAddress (hLib, 'GetNewTab'));
    if Assigned (getTab) then
    begin
      sheet := getTab();
      sheet.PageControl := PageControl1;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Digielm

Registriert seit: 2. Aug 2006
246 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: ein Tabsheet aus einer DLL erzeugen in ein Pageconrol

  Alt 25. Sep 2009, 12:22
hallo


ich habe folgende Idee:

ich benutze die Möglichkeit die gesamt Classe die ich gemacht habe also als TTabsheet zu exportieren: ( innerhalb der DLL)


Delphi-Quellcode:

RegisterClass(TMYTabsheet);
Problem dabei wäre noch das ich einen TMYTabsheet.Create(parameter) habe.

wie kann ich das einbinden.

Im MainProgramm nutze ich diesen Source:
Delphi-Quellcode:

interface
type
    TMyTabsheet = TTabSheet;
type

    mytabsheet : TMyTabsheet;

end;

procedure ladedll;
begin
  dllfile := ExtractFilePath(application.exename)+'Tabsheet.dll';

  hLib := LoadLibrary(pwidechar(dllfile));
  if hLib > 0 then
  begin
    mytabsheet := TMYTABSHEET(GetProcAddress(hLib, PChar('TMYTABSHEET'));
  end;
end;
Nur leider ist das mytabsheet bei desem Aufruf immer Nil

Was mache ich denn gedanklich falsch.
  Mit Zitat antworten Zitat
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#6

Re: ein Tabsheet aus einer DLL erzeugen in ein Pageconrol

  Alt 25. Sep 2009, 13:25
Das geht so nicht mit einer Dll. Die exportiert keine Objekte, sondern nur Funktionsadressen. Der Aufruf von GetProcAddress liefert einen Pointer auf eine solche Funktionsadresse. Da nützt auch ein Typecast wenig
Du kannst natürlich mit Hilfe einer Funktion ein Objekt aus der Dll per Funktionsaufruf erhalten - siehe mein Beispiel.
Wenn du Objekte direkt exportieren willst, musst du statt einer Dll ein Package erstellen. Auch Packages lassen sich, ähnlich wie Dlls, dynamisch laden. Du benötigst dazu die Funktion "LoadPackage". Ich bin sicher, in der DP gibt es dazu eine Menge zu erfahren.
  Mit Zitat antworten Zitat
Digielm

Registriert seit: 2. Aug 2006
246 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: ein Tabsheet aus einer DLL erzeugen in ein Pageconrol

  Alt 25. Sep 2009, 13:30
Hallo

hab da was im DP Forum gefunden zu

Delphi-Quellcode:
    
    pc := GetClass('TmyTABSHEET');
    if PC <> Nil then
    begin
      MYTABSHEET := TTABSHEET(pc).Create('TESTCAPTION');
    end;
da kriege ich aber leider auch fehler.

Ich habe das Problem das ich eingentlich die Unit mit der Classe TMYTABSHEET nicht in ein Projekt einbinden will, sondern kompl. dynamisch darauf zugreifen möchte, auch mit div. zusätzlichen aufrufen , die es in TTabsheet nicht gibt.

Das muß doch irgenwie machbar sein.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: ein Tabsheet aus einer DLL erzeugen in ein Pageconrol

  Alt 25. Sep 2009, 13:33
Zitat von fajac:
Das geht so nicht mit einer Dll. Die exportiert keine Objekte, sondern nur Funktionsadressen. Der Aufruf von GetProcAddress liefert einen Pointer auf eine solche Funktionsadresse. Da nützt auch ein Typecast wenig
Direkt nicht ... du kannst dich ja gern mal im "DLL"-Verzeichnis in meinem himXML umsehen.
Da erkennt man leicht, was ich für einen Aufwand betreiben mußte, um Klassen aus einer DLL in die EXE zu exportieren.
Im Endefekt sieht es so aus, daß ich die RTTI von Dummy-Klassen in der EXE, beim Laden der DLL, durch deren RTTI-Informationen ersetze und zusätzlich muß natürlich auch noch ein Shared-Memory-Manager eingerichtet sein, damit die Speicherverwaltung nicht durchdreht (z.B. Speicher bei einem Manager reservieren und versuchen bei einem anderen Manager zu ändern, bzw. freizugeben).
$2B or not $2B
  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:00 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