AGB  ·  Datenschutz  ·  Impressum  







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

PlugIn Schnittstelle - DLL

Ein Thema von Prototypjack · begonnen am 3. Jul 2006 · letzter Beitrag vom 2. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#1

PlugIn Schnittstelle - DLL

  Alt 3. Jul 2006, 19:45
Hallo,
Zuerst muss ich mich entschuldigen, ich habe hier ein Problem mit Dlls und mit denen arbeite ich nur sehr selten und deshalb ist mein Wissen derer als sehr begrenzt einzustufen.
Also,
Wie sooft wenn ich etwas realisieren will, dass (zumindest für mich) mehr oder weniger neue "Technologien" erfordert baue ich es erstmal "im Reinen" in ein Testapp um dort das Potential austesten zu können. Deshalb ist mein Testapp auch teilweise mit Fragmenten bestückt die ich zum Testen benutzt habe und für das eigentliche Ziel unerheblich sind, das ganze hat etwas von einer Baustelle .

Zum Problem:
Ich habe hier eine Dll und ein Programm die Daten austauschen sollen(Die Dll soll einen Loader für spezifische Daten darstellen, welche immer erweitert werden(deshalb die Dll)). Die Dll "registriert" sich im Programm mit einem eigenen Typus("PlugIn") über den die Funktionen gesteuert werden.

Soweit, so gut, alles funktioniert, ich kann auch (testweise) Strings austauschen. Jedoch erfordert das Ziel den Austausch binärer Daten(in diesem Fall die Daten eines TBitmaps), und das will einach nicht funktionieren. Beide Funktionen funktionieren(angepasst auf Strings) anstandslos.

Es hat den anschein als würden einfach keine Daten ankommen.

Hier sind mal die Funktion und der Aufruf:
Aufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if opendialog1.Execute then
  begin
    Image1.Picture.Bitmap.Assign(
      FPlugIns[0].PlugIn.Loadmage(Opendialog1.Filename));
    showmessage(IntToStr(Image1.Picture.Bitmap.Height)); //<-- Ergibt "0"!
  end;
end;
Funktion:
Delphi-Quellcode:
function TPlugIn01.Loadmage(Filename: String): TBitmap;
var
  Bit: TBitmap;
begin
  Bit := TBitmap.Create;
  try
    Bit.LoadFromFile(Filename);
    Result :=Bit;
    MessageBox(Parent, PChar(IntToStr(Bit.Width)), '', 0);
  finally
    Bit.Free;
  end;
end;

Ich bedanke mich schonmal hier für die Aufmerksamkeit und hoffe auf eure Hilfe
Gruß,
Max
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

Re: PlugIn Schnittstelle - DLL

  Alt 3. Jul 2006, 20:10
Hast du den Kommentar gelesen, der in jedem DLL-Prjekt oben drin steht?
Hast du die Unit eingebunden?
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#3

Re: PlugIn Schnittstelle - DLL

  Alt 3. Jul 2006, 20:20
Zum Grusse!
Aber natürlich, die "ShareMem.pas" befindet sich in beiden Projekten an Stelle 1.
Ich wollte es sogar mit FastMM4 lösen, jedoch komme ich dort nichtmal bis zum OnShow Event, das Programm stirbt schon viel früher und verabschiedet sich mit einer AC.

Würde sich diese essentielle Unit nicht im Projekt befinden, würde ja der String-Austausch auch nicht funktionieren, daran liegt's wohl nicht.

Bitte um weitere Antworten,
Gruß,
Max

PS: Wenn mehr Quellcode benötigt wird, einfach Sagen welchen und ihr sollt ihn bekommen
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
lizardking

Registriert seit: 2. Sep 2005
76 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: PlugIn Schnittstelle - DLL

  Alt 3. Jul 2006, 21:40
Versuch's mal so: (ungetestet)

Delphi-Quellcode:
function TPlugIn01.Loadmage(Filename: String): TBitmap;
begin
  Result := TBitmap.Create;
  Result.LoadFromFile(Filename);
  MessageBox(Parent, PChar(IntToStr(Result.Width)), '', 0);
end;
Was Du gemacht hast ist naemlich, dem Result den Pointer auf das lokal erstellte Bitmap zu setzen. Da Du dann aber das Bitmap mit free wieder freigibst, ist logisch dass da nichts ankommt.

Gruesse,

Lizzy
  Mit Zitat antworten Zitat
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#5

Re: PlugIn Schnittstelle - DLL

  Alt 3. Jul 2006, 21:54
Jetzt sagt er mir "Cannot assign a TBitmap to a TBitmap" in dem Moment wenn das Image das Tbitmap mit assign übernimmt.
Gruß,
Max
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
lizardking

Registriert seit: 2. Sep 2005
76 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: PlugIn Schnittstelle - DLL

  Alt 3. Jul 2006, 22:07
Zitat von Prototypjack:
Jetzt sagt er mir "Cannot assign a TBitmap to a TBitmap" in dem Moment wenn das Image das Tbitmap mit assign übernimmt.
Gruß,
Max
Ahh.. ganz vergessen. Objekte kannst Du nur zwischen der Exe und der Dll austauschen, wenn Du mit Packages kompilierst. In diesem Fall muss die VCL als Package eingebunden werden. Wenn die VCL statisch eingebunden ist, stimmen die RTTI-Infos der Klassen nicht ueberein und es scheint als gaebe es 2 unterschiedliche Klassen TBitmap.

Gruesse,

Lizzy
  Mit Zitat antworten Zitat
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#7

Re: PlugIn Schnittstelle - DLL

  Alt 3. Jul 2006, 22:14
Ok, und wie schaffe ich es die VCL reinzupacken?
Klingt jetzt vielleicht dumm und ich weiss bestimmt was du meinst nur eben momentan nicht
Gruß,
Max
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
Benutzerbild von alias5000
alias5000

Registriert seit: 10. Sep 2005
Ort: Heilbronn
268 Beiträge
 
#8

Re: PlugIn Schnittstelle - DLL

  Alt 3. Jul 2006, 22:30
Du müsstest statt DLLs Packages verwenden, wenn ich das richtig beim überfliegen gelesen hab. Eine Anleitung dazu findest du z.B. hier http://www.alcaeus.org/filelib_detail.php?file_id=17

Gruß alias5000
Im Interesse der Purierung des germanischen Ideoms ist es opertum den immensen Usus peregrieder Verben auf ein Minimum zu reduzieren.
--> www.lanchat2.de <---
  Mit Zitat antworten Zitat
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#9

Re: PlugIn Schnittstelle - DLL

  Alt 3. Jul 2006, 23:00
Guten Abend!
Heisst das, es ist nicht möglich das über eine Dll zu regeln? Das kann ich mir nicht vorstellen, da es ja andere Projekte offenbar ähnlich lösen, ausserdem ist die Umstieg auf Packages schlecht, da damit die möglichkeit der erweiterung des Programmes durch andere Compiler(C++, f.e.) umgeworfen wird.
Es muss doch irgendwie gehen.
Ein weiteres Mal bitte ich um Hilfe
Gruß,
Max
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
Benutzerbild von alias5000
alias5000

Registriert seit: 10. Sep 2005
Ort: Heilbronn
268 Beiträge
 
#10

Re: PlugIn Schnittstelle - DLL

  Alt 3. Jul 2006, 23:04
Naja, dlls unterstüzen halt keine OOP
Im Interesse der Purierung des germanischen Ideoms ist es opertum den immensen Usus peregrieder Verben auf ein Minimum zu reduzieren.
--> www.lanchat2.de <---
  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 21:31 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