Forum: PC-Programmierung DirectX + C möglich?


von Christopher C. (Gast)


Lesenswert?

Hallo,

ist es eigentlich möglich DirectX mit "C" (also kein C++) zu 
programmieren. Ich finde über Google über dieses Thema gar nichts (kommt 
nur Zeug über C++). Ich glaube einmal gelesen zu haben, dass DirectX ein 
C Interface haben soll. Und wenn ja, wie ist es im Vergleich zu C++? 
Umständlicher ? Vielen Dank!

von Strickwettbewerbgewinner (Gast)


Lesenswert?

Nimm OpenGL, dessen Interface ist in C, und außerdem geht das dann 
automatisch auf vielen anderen Betriebssystemen und Plattformen.

von Christopher C. (Gast)


Lesenswert?

Also OpenGL werde ich auf jeden Fall benutzen, schon weil es 
Plattformunabhängig ist. Aber vielleicht will ich auch irgentwann 
DirectX miteinbauen. Eigentlich will ich das wissen, weil ich mich 
zwischen C und C++ entscheiden muss. Ich kann beide, aber C gefällt mir 
irgentwie besser :).

von Peter II (Gast)


Lesenswert?

Strickwettbewerbgewinner schrieb:
> Nimm OpenGL, dessen Interface ist in C, und außerdem geht das dann
> automatisch auf vielen anderen Betriebssystemen und Plattformen.

DirecX kann aber viel mehr als OpenGL, ist also mal wieder ein vergleich 
von Äpfel und Birnen.
(Sound, Input, Netzwerk )

MS schreibt das es in C und C++ geht

http://msdn.microsoft.com/en-us/library/ff476080%28v=vs.85%29

von Christopher C. (Gast)


Lesenswert?

Ah danke. Das komische ist nur, dass auf der Seite steht:

Recommended programming languages  C/C++

aber

Supported runtime environments     Windows/C++

Ist das nicht widersprüchlich, oder irre ich mich da?

von Christopher C. (Gast)


Lesenswert?

Es geht tatsächlich. Habe den C++ zu C portiert, allerdings macht das C 
Interface überhaupt keinen Spaß. Denn ist haargenauso aufgebaut und 
macht quasi OOP mit Funktionszeiger möglich, somit wird:

swapChain->Release();

zu

swapChain->lpVtbl->Release(swapChain);

Oder ist das noch anders möglich?
Jedenfalls werde ich mir das nicht antun und auf DirectX zunächst 
verzichten. Wäre mit C sowieso meine erste Wahl gewessen.

Danke.
mfg

von Peter II (Gast)


Lesenswert?

Ich versteht die abneigung gegen C++ nicht. Willst du wirklich auf 
std::string, std::list usw verzichten?

Andere vermissen schon auf den kleinen µC C++ und du willst 
Desktopanwendungen in C schreiben?

Ist ja schon fast estaunlich das du es nicht in ASM machen willst.

von Christopher C. (Gast)


Lesenswert?

Nein C++ ist wirklich nicht schlecht, aber ich finde diese Einfachheit 
von C einfach genial (und ich komme aus der C# Ecke ;) ). Wenn man nur 
ein bisschen Ahnung von ASM hat, kann man sagen was genau passiert. 
Komponenten wie std::string oder std::list habe ich selber geschrieben, 
sind natürlich nicht so komfortabel, aber sie tun ihre Arbeit. Das 
einzige was mir wirklich fehlt sind die Templates, sind zwar nicht 
unbedingt notwendig, da es der void* zeiger auch tut, allerdings nervt 
die Umwandlung in den benötigten Typ.

Auf ASM stehe ich nicht so, viel zu aufwendig.

von Strickwettbewerbgewinner (Gast)


Lesenswert?

Christopher C. schrieb:
> diese Einfachheit von C
nutzt leider die Tastatur ganz schön ab... Es gibt Gründe dafür, dass 
nicht alles zu Füß transportiert wird ;-)

von Karl H. (kbuchegg)


Lesenswert?

Christopher C. schrieb:
> Nein C++ ist wirklich nicht schlecht, aber ich finde diese Einfachheit
> von C einfach genial (und ich komme aus der C# Ecke ;) ).

Es hindert dich allerdings auch nichts und niemand daran, dein C++ 
Programm so zu schreiben
1
int main()
2
{
3
  int i;
4
  struct MyStruct j;
5
6
  printf( ..
7
}

sprich: mit ganz wenigen Ausnahmen sind C Programme auch gültige C++ 
Programme (zumindest fehlt nicht viel und das was der C++ Compiler 
anmeckern wird, ist auch in C sowieso meistens zweifelhaft). Jag dein C 
Programm durch den C++ Compiler durch, korrigiere die Fehler, die dir 
der anmeckert, und damit ist dein Teil erledigt.
Plus: Du kannst dann DirectX auf die komfortable Variante mit Objekten 
ansprechen, so wie sich MS das dann auch gedacht hat.


> sind zwar nicht unbedingt notwendig, da es der void* zeiger auch tut

:-)
Du bist drauf und drann zu erkennen, wo dir eine Klassenhierarchie mit 
Ableitungen und Polymorphismus unter die Arme greifen kann. Dann hast du 
'Void Zeiger' die vom Compiler datentypmässig trotzdem überwacht werden 
und dich selbst soweit einschränken, dass du nicht mit einem unbedachten 
Cast alles zerstören kannst.

von Lattice User (Gast)


Lesenswert?

Christopher C. schrieb:
> swapChain->lpVtbl->Release(swapChain);
>
> Oder ist das noch anders möglich?

Füge vor allen includes ein

#define COBJMACROS

hinzu. Dann kannst du es auch so schreiben:

InterfaceName_Release(swapChain);

Aber Karl Heinz hat recht. Ein C++ Compiler ist der bessere C Compiler. 
Niemand zwingt dich die STL zu verwenden.

von Christopher C. (Gast)


Lesenswert?

Meint ihr etwa ich soll C und C++ Code mischen oder denkt ihr einfach an 
die Vorteile einen C++ Compiler für C zu benutzen. Welche Vorteile hätte 
dies denn genau?

von Karl H. (kbuchegg)


Lesenswert?

Christopher C. schrieb:
> Meint ihr etwa ich soll C und C++ Code mischen

So ungefähr.
Der Punkt ist: C Code sieht in C++ auch nicht anders aus. Dein Projekt 
ist zwar ein C++ Projekt, du schreibst aber nach wie vor so, wie du es 
von C gewohnt bist. Kein Mensch sagt, dass du beim Umstieg auf einen C++ 
Compiler, sofort Klassen und Vererbung und dergleichen einsetzen musst. 
Du kannst den überwiegenden Anteil deiner C-Funktionen einfach in dein 
C++ Projekt einfügen und die werden genauso compiliert wie alles andere 
auch und wie es auch dein C Compiler tat. Ein paar Feinheiten gibt es, 
die in C++ anders sind als in C, aber das sagt dir dann schon der 
Compiler.

> oder denkt ihr einfach an
> die Vorteile einen C++ Compiler für C zu benutzen. Welche Vorteile hätte
> dies denn genau?

C++ Compiler sind pingeliger.
Und: du kannst nach und nach in C++ und ganz speziell in die Welt der 
OOP reinwachsen.
Und natürlich: Dein DirectX Problem hat sich soeben in Luft aufgelöst.

von Christopher C. (Gast)


Lesenswert?

Guter Vorschlag. Ich lasse mir es mal durch den Kopf gehen.
Vielen Dank nochmal ;).

mfg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.