Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   IInterface Delphi vs VSC (https://www.delphipraxis.net/193456-iinterface-delphi-vs-vsc.html)

EWeiss 2. Aug 2017 14:49

IInterface Delphi vs VSC
 
Delphi.
Delphi-Quellcode:
  TStreamInfo = record
    streamType: TStreamType;
    ppmt: PAMMEDIATYPE;
    pdwFlags: Cardinal;
    plcid: Cardinal;
    pdwGroup: Cardinal;
    ppszName: PWideChar;
    ppObject: IInterface;
    ppUnk: IInterface;
  end;
C++
Code:
struct TStreamInfo {
  TStreamType streamType;
  AM_MEDIA_TYPE ppmt;
  unsigned int pdwFlags;
  unsigned int plcid;
  unsigned int pdwGroup;
  wchar_t* ppszName;
  IUnknown **ppObject;
  IUnknown **ppUnk;
};
Bin mir jetzt nicht sicher ob die Übersetzung im Header korrekt ist.
C kennt kein IInterface so wie in Delphi oder aber ich finde sie einfach nicht.

gruss

himitsu 2. Aug 2017 15:27

AW: IInterface Delphi vs VSC
 
IUnknown kennt Delphi auch,
aber fast Egal, da es ein Nachfahre von IInterface ist.



Erstmal mußt du auf die Speicherausrichtung achten:
Alte Delphis richten Standardmäßig nach "maximal" 4 Byte aus und etwas Neuere nach 8 Byte.
Wie im C dort der Standard ist, weiß ich nicht.

Also entweder das gleiche Align des C-Compilers explizit für diesen Record oder die ganze Unit einstellen.
Delphi-Quellcode:
{$ALIGN ...}


Oder Packed-Records verwenden.
Auf Seite des C auch Packed oder im Delphi mit FüllBytes arbeiten.



Speichergrößen:
In C++ sind ENUMs/SETs gern so groß wie ein INT
und in Delphi so klein wie möglich (meistens Byte und dann Word, LongWord oder UInt64).
Delphi-Quellcode:
{$MINENUMSIZE ...}

EWeiss 2. Aug 2017 15:35

AW: IInterface Delphi vs VSC
 
es ging mir um die beiden Einträge.

Code:
  IUnknown **ppObject;
  IUnknown **ppUnk;
ob diese gleichzusetzen sind mit IInterface.
Wenn nicht ist mein Header definitiv falsch übersetzt.

gruss

TiGü 2. Aug 2017 16:09

AW: IInterface Delphi vs VSC
 
Ja!

EWeiss 2. Aug 2017 16:14

AW: IInterface Delphi vs VSC
 
Zitat:

Zitat von TiGü (Beitrag 1377941)
Ja!

Danke!

gruss

himitsu 2. Aug 2017 16:16

AW: IInterface Delphi vs VSC
 
Zitat:

Zitat von himitsu (Beitrag 1377930)
IUnknown kennt Delphi auch,
aber fast Egal, da es ein Nachfahre von IInterface ist.

hier steht nichts

EWeiss 2. Aug 2017 17:06

AW: IInterface Delphi vs VSC
 
Zitat:

Zitat von himitsu (Beitrag 1377943)
Zitat:

Zitat von himitsu (Beitrag 1377930)
IUnknown kennt Delphi auch,
aber fast Egal, da es ein Nachfahre von IInterface ist.

hier steht nichts

Ja habe ich gelesen Danke dir.
War mir nur nicht sicher ob du damit das gleiche gemeint hast.

Da steht doch was spätestens dann wenn man eine Quote daraus macht ;) LOL

gruss

himitsu 2. Aug 2017 18:37

AW: IInterface Delphi vs VSC
 
Zitat aus der System.pas
Zitat:

Delphi-Quellcode:
type
  IUnknown = IInterface;

Vom Typ her ist es prizipiell das Selbe, in Delphi.
http://docwiki.embarcadero.com/RADSt...und_IInterface

EWeiss 2. Aug 2017 18:41

AW: IInterface Delphi vs VSC
 
Zitat:

Zitat von himitsu (Beitrag 1377959)
Zitat aus der System.pas
Zitat:

Delphi-Quellcode:
type
  IUnknown = IInterface;

Hatte vorhin wohl mehr an IDispatch gedacht.
Von der Speicherverwaltung her das Gleiche, außer dass man quasi virtuelle Methoden aufrufen kann, also wenn man das Interface verwendet.
(IDispatch in einem Variant\OleVariant)

Die frage ist nur wird das IUnknown auch initialisiert VSC seite.
So wie das bei IInterface in Delphi ist.

also.
Ich habe diese Funktionen in der art in meinem Header nicht.
Code:
 virtual HRESULT __stdcall QueryInterface(const GUID &IID, void **Obj)
 {
     return TInterfacedObject::QueryInterface(IID, (void *)Obj);
 
 
 virtual ULONG __stdcall AddRef()
 { 
     return TInterfacedObject::_AddRef();
 } 
 
 // ...
 virtual ULONG __stdcall Release()
 { 
     return TInterfacedObject::_Release();
 }
Wird das in VSC automatisch gemacht wenn ich IUnknown als DatenTyp übergebe?

gruss

himitsu 2. Aug 2017 18:53

AW: IInterface Delphi vs VSC
 
Das ist im IInterface drin.

Bzw. dein Code gehört nicht zum Interface, sondern zur Implementation und da ist es unter Anderem in TInterfacedObject enthalten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr.
Seite 1 von 4  1 23     Letzte »    

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