Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

1

20.09.2006, 15:40

Frage zu COM!

Hi,
Ich wollte mal die Forenspezialisten fragen wie man Com programmiert.
Also ich weiß das DirectX auf Com basiert.

Aber leider weiß ich nicht wie Com-Code aussieht und aufgebaut ist.

Ich hatte mir Com-Code so vorgestellt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class IInterfaceClass
{
 //hier steht abstrakter code.

};

class ComClass_V1 : public IInterfaceClass
{
 //Hiersteht code der nur für Die erste Version einer Comsoftware ist!

};

class ComClass_V2 : public ComClass_V1
{
 //Hier ist code von der ersten mit neuen Codes die zusammen V2 der Comsoftware bilden!!!

}


Stimmt das wenigstens ansatzweise? oder wie wird Com programmiert?
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

2

20.09.2006, 19:02

Re: Frage zu COM!

Zitat von »"T-VIRUS"«

Stimmt das wenigstens ansatzweise?


Wenn Du IInterfaceClass noch von IUnknown erben lässt: Ja.

Allerdings ist das nur ein ganz kleiner Teil des Ganzen. Dazu gehören noch eine Menge Registry-Einträge (normalerweise, ab XP reicht auch ein entsprechendes Manifest, Stichwort "Registration Free COM"). Dann benötigst Du noch eine Klassenfabrik, da die Objekte auch irgendwo herkommen müssen, usw..

COM in C++ zu Fuß und ohne Hilfsmittel ist nicht so ganz einfach, deswegen gibt es zum Thema auch ganze Bücher. Wenn Dich das wirklich interessiert, solltest Du auf ein solches zurückgreifen. Gut ist "Inside DCOM" oder dessen Nachfolger "Inside COM+" von Guy und Henry Eddon. Auch sehr gut ist "COM" von Don Box, ist aber schwer zu lesen, IMO.

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

3

20.09.2006, 19:49

Jo danke werd mich mal informieren ^^
Aber warum muss ich von IUnknow bleiten?
Wie ist IUnknown aufgebaut?
Muss ich vllt IUnknow selbst definieren?
Kann ich es auch nach meiner Art machen :p?

Z.b. wenn ich eine Engine Klasse schreiben?
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Paul_C.

Frischling

Beiträge: 81

Wohnort: Duisburg

  • Private Nachricht senden

4

20.09.2006, 19:56

Ich habe hier zuhause das Buch von Frank Budszuhn, da wird viel über COM geschrieben. Leider kam ich lange nicht dazu, das Kapitel weiterzulesen. Ich könnte mich aber in den nächsten Tagen nochmal schlau machen und nachlesen.

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

5

20.09.2006, 20:08

Jo wäre nett wenn du mir da etwas helfen könntest :)
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Paul_C.

Frischling

Beiträge: 81

Wohnort: Duisburg

  • Private Nachricht senden

6

20.09.2006, 20:23

Also, habe das Buch mal wieder herausgekramt. Muss aber mich erst wieder einlesen. Jedenfalls kann ich dir schonmal soviel verraten, dass es die COM-Notation erfordert, dass jede Schnittstelle von IUnknown abgeleitet ist.

IUnknown ist folgendermaßen definiert:

C-/C++-Quelltext

1
2
3
4
5
6
7
interface IUnknown
{
   public:
      virtual HRESULT STDMETHODCALLTYPE QueryInterface (RFIID riid, void **ppvObject) = 0;
      virtual ULONG STDMETHODCALLTYPE AddRef(void) = 0;
      virtual ULONG STDMETHODCALLTYPE Release(void) = 0;
};


Mit QueryInterface kann nach weiteren Schnittstellen angefragt werden. Werden diese unterstützt, dann wird ein Zeiger auf die Schnittstelle geliefert.
AddRef und Release dienen der Instanzzählung. Beim AddRef wird im COM-Objekt der Referenzzähler um 1 erhöht. Release dekrementiert diesen. Ist der Zähler bei 0 angekommen, dann löscht sich das COM-Objekt selbstständig.

So, nun muss ich weiterlesen. ;)

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

7

21.09.2006, 06:47

Ah okay :)
Aber wie ist das Interface definiert?
Also Klasse per Typedef?
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Paul_C.

Frischling

Beiträge: 81

Wohnort: Duisburg

  • Private Nachricht senden

8

21.09.2006, 08:02

So wie es aussieht, ist es ein struct:

C-/C++-Quelltext

1
#define interface struct


Habe mal noch in meinem Buch gestöbert. Das sind tatsächlich über 100 Seiten nur Grundlagen zu COM. Danach kommt noch Automation, OLE, ActiveX. Das wird wohl noch dauern, bis ich das durchgearbeitet habe. Vor allem, da ich in der nächsten Zeit nicht viel Freizeit dafür aufbringen kann. :(

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

9

21.09.2006, 16:04

Nach meinem Wissen können Strudts keine Methoden haben oder irre ich mich da?
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

21.09.2006, 16:28

du irrst dich, zumindest was c++ betrifft ;). da ist der einzige unterschied zwischen struct und class, dass struct per default public zugriff hat und class private (auch was vererbung angeht).
sogar unions können member funktionen besitzen, da es sich bei union wie bei struct um einen klassentyp handelt.

Werbeanzeige