DirectX + C möglich?

Gast #2685938
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!
Gast #2685947
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
Gast #2686071
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
Gast #2686157
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.
#2687174
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.
Gast #2687203
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.
#2687592
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren