Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Interfaces über Modulgrenzen implementieren (https://www.delphipraxis.net/99190-interfaces-ueber-modulgrenzen-implementieren.html)

DGL-luke 8. Sep 2007 09:59


Interfaces über Modulgrenzen implementieren
 
Hallo,

ich schreibe gerade eine größere Anwendung mit umfangreichem Plugin-System. Ich wüsse jetzt gern, ob ich über die Modulgrenzen, d.h. innerhalb einer DLL, ein Plugin implementieren und das ans Hauptmodul liefern kann.

Also z.B. so:

Delphi-Quellcode:
type
  IMyInterface = interface
    function MyFUnction: string;
  end;
Delphi-Quellcode:
//DLL-Code
type
  TMyPlugin = class(TInterfacedObject, IMyInterface)
    function MyFunction: string;
  end;

function GetPlugin: IMyInterface; stdcall; export;
begin
  Result := MyPlugin;
end;
Delphi-Quellcode:
//EXE-Code
modh := loadlibrary('myplugin.dll');
GetPlugInProc := GetProcAddress(modh, 'GetPlugIn');
PluginIntf := GetPluginProc;

Showmessage(PluginIntf.MyFunction);
Gibts da irgendwelche Hindernisse?

phXql 8. Sep 2007 10:01

Re: Interfaces über Modulgrenzen implementieren
 
Musst halt mit den Strings aufpassen, entweder nur PCHar benutzen oder diese eine komische Unit einbinden (Name entfallen :/)

DGL-luke 8. Sep 2007 10:03

Re: Interfaces über Modulgrenzen implementieren
 
Ja, SharedMem ^^
Aber da schlägt ja wieder der Borland-MM zu. Das will ich eigentlich verhindern (Hab dazu schon n Thread aufgemacht ;-) )

arbu man 8. Sep 2007 10:06

Re: Interfaces über Modulgrenzen implementieren
 
Dann nim doch den Type WideString imho kann man dem Benutzen :)

Elvis 8. Sep 2007 10:09

Re: Interfaces über Modulgrenzen implementieren
 
Zitat:

Zitat von DGL-luke
Ja, SharedMem ^^
Aber da schlägt ja wieder der Borland-MM zu. Das will ich eigentlich verhindern (Hab dazu schon n Thread aufgemacht ;-) )

ShareMem oder FastMM wären eine Möglichkeit. Aber wesentlich besser sind WideStrings.
Nicht nur weil sie nicht Delphi-spezifisch sind, sondern wohl auch weil im Jahre 2007 AnsiStrings einfach nur noch jämmerlich yestercentury sind.
Solange du irgendwelche dinge darin packst, die keinerlei regionalen Kontext haben, mag das noch Sinn machen AnsiStrings zu nehmen, aber warum sollte man einem Russen, Koreaner, Japaner, Franzosen, [irgendeine Sprache != deiner eigenen] aufzwingen, in für ihn komisch aussehenden Zeichen zu tippen?
Unicode ist also im Zweifelsfall sowieso vorzuziehen, auch wenn es nur das uralte UCS2 vom WideString ist.

DGL-luke 8. Sep 2007 10:34

Re: Interfaces über Modulgrenzen implementieren
 
Widestrings beinhalten also weniger Compiler-Magic und laufen deswegen über Modulgrenzen?

Bitte sag mir doch mehr, und nicht immer nur so kleine Häppchen :cry:
(Du willst mir nicht zufällig n Buch andrehen? :mrgreen: )

EDIT: Widestrings wären mir natürlich auch recht. Ich würd halt dann, bis das Programm komplett auf Unicode umgestellt wird (was im Moment NICHT geplant ist, vielleicht mit der Delphi-Version, die ne Unicode-VCL mitbringt) das aktuelle Codepage-ASCII reinpacken...

Elvis 8. Sep 2007 10:47

Re: Interfaces über Modulgrenzen implementieren
 
Zitat:

Zitat von DGL-luke
Widestrings beinhalten also weniger Compiler-Magic und laufen deswegen über Modulgrenzen?

WideString ist ein BSTR, also ein Typ, den Windows selbst kennt.
Es ist auch der String, den man in COM benutzt (weshalb er in delphi gerne OleString genannt wird).

Zitat:

Bitte sag mir doch mehr, und nicht immer nur so kleine Häppchen :cry:
Kleine Häppchen und diffus eingestreute Zusatzinfos machen aber mehr Spass. :-P
Zitat:

(Du willst mir nicht zufällig n Buch andrehen? :mrgreen: )
Ich halte nichts von Büchern. Fachbücher sind was für Faulenzer und Bergaufbremser.

Zitat:

EDIT: Widestrings wären mir natürlich auch recht. Ich würd halt dann, bis das Programm komplett auf Unicode umgestellt wird (was im Moment NICHT geplant ist, vielleicht mit der Delphi-Version, die ne Unicode-VCL mitbringt) das aktuelle Codepage-ASCII reinpacken.
Damit wäre wenigstens deine öffentliche API für die PlugIns stabil, auch wenn du in der App erst dann Unicode haben wirst, bis du entweder auf Delphi2063 wartest, oder TNT benutzt.

DGL-luke 8. Sep 2007 10:49

Re: Interfaces über Modulgrenzen implementieren
 
Okay, cool, dann bitte nur noch den anderen Thread beantworten :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz