Delphi-PRAXiS
Seite 2 von 4     12 34      

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 19:00

AW: IInterface Delphi vs VSC
 
Zitat:

Zitat von himitsu (Beitrag 1377961)
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.

Ok Danke ;)

gruss

himitsu 2. Aug 2017 19:06

AW: IInterface Delphi vs VSC
 
In Windows (C) können Interfaces scheinbar auch ohne, aber Delphi geht davon aus, dass Interfaces immer mindestens IInterface implementieren. (es wird halt für die automatische Speicherverwaltung verwendet)

Zacherl 2. Aug 2017 21:30

AW: IInterface Delphi vs VSC
 
Zitat:

Zitat von himitsu (Beitrag 1377963)
In Windows (C) können Interfaces scheinbar auch ohne, aber Delphi geht davon aus, dass Interfaces immer mindestens IInterface implementieren. (es wird halt für die automatische Speicherverwaltung verwendet)

Genau, C++ macht keine konkrete Unterscheidung zwischen Klasse und Interface (wie es bei z.b. Delphi oder Java der Fall ist). C++ Interfaces sind einfach ganz normale Klassen, die ausschließlich virtuelle Methoden besitzt. Will man COM-kompatibel sein, muss man aber zwingend
Delphi-Quellcode:
_AddRef
,
Delphi-Quellcode:
_Release
und
Delphi-Quellcode:
QueryInterface
bereitstellen.

Zu beachten ist, dass es unter C++ KEINE automatische Speicherverwaltung gibt. Sprich:
Delphi-Quellcode:
_AddRef
und
Delphi-Quellcode:
_Release
muss manuell aufgerufen werden (oder man verwendet den ComPtr). Aber das sollte bei dir keine Probleme machen, da die Implementierung ja in Delphi ist.

EWeiss 2. Aug 2017 23:32

AW: IInterface Delphi vs VSC
 
Zitat:

Aber das sollte bei dir keine Probleme machen, da die Implementierung ja in Delphi ist.
also brauch ich _AddRef und Konsorte in C++ nicht zu definieren.
Darauf wollte ich hinaus ;)

gruss

himitsu 3. Aug 2017 09:16

AW: IInterface Delphi vs VSC
 
Wenn du es als COM-Interface mit Delphi teilen willst, dann sollte es mit rein. (falls es nicht schon aus einem Vorfahren verwerbt wird)

Uwe Raabe 3. Aug 2017 10:09

AW: IInterface Delphi vs VSC
 
Zitat:

Zitat von EWeiss (Beitrag 1377969)
also brauch ich _AddRef und Konsorte in C++ nicht zu definieren.

Ich kenne jetzt den ganzen Zusammenhang nicht, aber wenn das Interface von C++ aus verwendet werden soll, dann müssen diese Methoden nicht nur definiert, sondern auch aufgerufen werden. Andernfalls könnte es passieren, daß die darunter liegende Instanz zu früh freigegeben wird.

EWeiss 3. Aug 2017 10:18

AW: IInterface Delphi vs VSC
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1377981)
Zitat:

Zitat von EWeiss (Beitrag 1377969)
also brauch ich _AddRef und Konsorte in C++ nicht zu definieren.

Ich kenne jetzt den ganzen Zusammenhang nicht, aber wenn das Interface von C++ aus verwendet werden soll, dann müssen diese Methoden nicht nur definiert, sondern auch aufgerufen werden. Andernfalls könnte es passieren, daß die darunter liegende Instanz zu früh freigegeben wird.

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;
 };
IUnknown wird von Delphi zurück gegeben.

Code:
BOOL KVIDEOPLAYERDEF(KVideo_GetStreamInfo)(TStreamType StreamType, DWORD index, TStreamInfo OUT StreamInfo);
// Gets informatio for the specified stream
// ( parameter )
//  - StreamType : type of stream (stAudio, stVideo, stMiscellaneous)
//  - index : number of rank (first stream = 0)
//  - StreamInfo : pointer to a TStreamInfo variable
// ( result
//  - true on success, false on failure
gruss

Uwe Raabe 3. Aug 2017 10:24

AW: IInterface Delphi vs VSC
 
Die Frage ist: was machst du mit den beiden IUnknown-Feldern? Solange du die nicht verwendest, sollte es wohl egal sein.

EWeiss 3. Aug 2017 10:39

AW: IInterface Delphi vs VSC
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1377985)
Die Frage ist: was machst du mit den beiden IUnknown-Feldern? Solange du die nicht verwendest, sollte es wohl egal sein.

Ich lese davon die Daten ein die von Delphi zurückgegeben werden.
Und das würde ich später zum vergleich auch in C++ tun.

Delphi-Quellcode:
    for i := 0 to aMediaProperty.NumVideoStream - 1 do
    begin
      KVideo_GetStreamInfo(stVideo, i, StreamInfo);
      menu := TMenuItem.Create(Self);
      menu.Caption := StreamInfo.ppszName;
      menu.RadioItem := true;
      if i = 0 then
        menu.Checked := true;
      menu.Tag := i;
      menu.OnClick := menuVideoStreamClick;
      menuSelectVideo.Add(menu);
    end;
Code:
   IUnknown **ppObject;
   IUnknown **ppUnk;
werden dabei aber nicht direkt angesprochen.

gruss

Uwe Raabe 3. Aug 2017 10:45

AW: IInterface Delphi vs VSC
 
Zitat:

Zitat von EWeiss (Beitrag 1377994)
Code:
   IUnknown **ppObject;
   IUnknown **ppUnk;
werden dabei aber nicht direkt angesprochen.

Ich denke, dann kannst du das so lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 Uhr.
Seite 2 von 4     12 34      

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