AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TCollection = not TCollection ?

Ein Thema von EWeiss · begonnen am 6. Jul 2011 · letzter Beitrag vom 7. Jul 2011
Antwort Antwort
Seite 4 von 4   « Erste     234
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.324 Beiträge
 
Delphi 11 Alexandria
 
#31

AW: TCollection = not TCollection ?

  Alt 7. Jul 2011, 18:29
Dann nimm eben keine DLL, sondern eine BPL. [...]
Die muss man aber Installieren oder?
Nein, mit LoadPackage laden.
http://edn.embarcadero.com/article/27178

Was eine DLL angeht, so müsstest du als Parameter auch Interfaces, z.B. abgeleitet von IUnknown, übergeben können. Denn die werden via COM verwaltet. Also so ca., ungetestet:
Delphi-Quellcode:
library xyz;

uses
  MyInterface;

procedure DoIt(AObject: ITest); stdcall;
begin
  MessageBox(0, AObject.GetMsg, 'test', MB_ICONINFORMATION or MB_OK);
  AObject.ShowMsg('Hallo');
end;

exports
  DoIt;
Delphi-Quellcode:
unit MyInterface;

interface

type
  ITest = interface(IUnknown)
    procedure ShowMsg(Value: PWideChar); stdcall;
    function GetMsg: PWideChar; stdcall;
    procedure SetMsg(Value: PWideChar); stdcall;
  end;
Benutzung:
Delphi-Quellcode:
uses
  MyInterface;

type
  TTest = class(TInterfacedObject, ITest)
  private
    FTest: string;
  public
    procedure ShowMsg(Value: PWideChar); stdcall;
    function GetMsg: PWideChar; stdcall;
    procedure SetMsg(Value: PWideChar); stdcall;
  end;

procedure DoIt(AObject: ITest); stdcall; external 'xyz.dll';

implementation

function TTest.GetMsg: PWideChar;
begin
  Result := PWideChar(FTest);
end;

procedure TTest.SetMsg(Value: PWideChar);
begin
  FTest := Value;
end;

procedure TTest.ShowMsg(Value: PWideChar);
begin
  ShowMessage(Value);
end;
Delphi-Quellcode:
var
  Test: ITest;
begin
  Test := TTest.Create;
  Test.SetMsg('Hallöchen');
  DoIt(Test);
  Test := nil; // explizite Freigabe, nur nötig, wenn sonst der Scope zu groß wäre
Vielleicht hilft dir das ja dabei das so zu kapseln oder so.

// EDIT:
Also ich denke da an so etwas wie ein Interface, das du der DLL übergibst und das in der Anwendung die Daten abruft und in Interface-Objekten der DLL liefert
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Geändert von jaenicke ( 7. Jul 2011 um 18:31 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#32

AW: TCollection = not TCollection ?

  Alt 7. Jul 2011, 18:34
Danke für eure Infos werde es mir mal anschauen.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TCollection = not TCollection ?

  Alt 7. Jul 2011, 18:47
Statt dem PWideChar kann man im Interface auch WideString nehmen, denn dieses wird auch über das COM-Zeugs verwaltet.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:29 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