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

Nik94

Frischling

  • »Nik94« ist der Autor dieses Themas

Beiträge: 18

Wohnort: Solingen

Beruf: Schüler

  • Private Nachricht senden

1

27.06.2011, 22:00

Problem mit DirectSoundEnumerate

Hallo zusammen.

Ich habe ein Problem mit der Funktion DirectSoundEnumerate. Ich verwende DirectX9, also DirectSound8. Hier ist der Codeausschnitt.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
BOOL CALLBACK CDirectSound::DSEnumCallback(LPGUID lpGuid,
LPCSTR lpcstrDescription,
LPCSTR lpcstrModule,
LPVOID lpContext)
{return true; 
}bool CDirectSound::Init() 
{
DirectSoundEnumerate(DSEnumCallback, NULL);
}

Und hier ist die Fehlermeldung:

Zitat


error C3867: "CDirectSound::DSEnumCallback": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&CDirectSound::DSEnumCallback", um einen Zeiger auf den Member zu erstellen.

Ich hoffe, mitr kann jemand helfen. Ich habe quasi das Beispiel aus der msdn kopiert und es funktioniert dennoch nicht. Ich habne die Dateien DSound.h und Dsound.lib eingebungen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

28.06.2011, 00:27

Die Funktion erwartet einen Funktionszeiger und du versuchst offenbar einen Methodenzeiger zu übergeben. Das funktioniert natürlich nicht da nicht statische Memberfunktionen nicht das gleiche sind wie einfache Funktionen (eine nicht statische Memberfunktion benötigt ein Objekt um aufgerufen zu werden).

Abgesehen davon würde ich dir aber raten DirectSound zu vergessen. Die API ist einfach total veraltet, ab Windows Vista läuft DirectSound in Softwareemulation. Verwend besser XAudio2.

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

3

28.06.2011, 19:26

@dot: Eine Frage:
Ich bin mir nicht ganz sicher, aber ich meine mal gehört zu haben, dass es beim aufrufen von C-Funktionspointern auf statische C++-Klassenmethoden zu fehlern kommen kann, wenn dies auch sehr selten ist. Ich finde es gerade nicht wieder, aber es wurde auf StackOverflow im Zusammenhang von freeglut mit C++ erwähnt. Kann das sein, oder bin ich da falsch informiert? Ich frage nur weil ich es doch gerne genauer wissen würde. ^^

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

28.06.2011, 19:37

Also das Einzige was da eigentlich schiefgehen könnte wäre dass die Aufrufkonventionen nicht übereinstimmen. Das ist aber ein generelles Problem und hat nichts mit statischen Memberfunktionen an sich zu tun (und man müsste den Compiler wohl mit einem Cast zwingen es zu kompilieren sofern nicht die Buildkonfiguration von vornherein total hinüber ist). Ne statische Memberfunktion ist ansonsten praktisch einfach eine normalen Funktion die eben im Namespace der Klasse liegt.

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

5

28.06.2011, 19:42

Ok, danke Dir. Ich hatte es leider nur überflogen und finde es nicht wieder. Er meinte auch das die Chancen, dass etwas schief geht enorm gering sind. :) Ich weiß nur, dass es mit normalen Methoden nicht passt, da diese etwas mehr Speicher belegen (afaik 2-3 mehr als statische Methoden / normale Funktionen).

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

28.06.2011, 19:49

Normale Methoden haben im Prinzip nur einen versteckten Parameter (den this Pointer) in dem beim Aufruf immer ein Zeiger auf das jeweilige Objekt mitübergeben wird. Das ist prinzipiell der einzige Unterschied. Ich kann dir garantieren dass es absolut nichts gibt was beim Aufruf einer statischen Methode irgendwie schneller/anders/was auch immer schiefgehn kann als bei einer nicht statischen!?

Wenn dein Programm komischen Sachen macht wie z.B. in Speicherbereichen rumschreiben wo es nicht sollte dann ist natürlich nichtsmehr garantiert. Das hat aber dann auch wieder gar nichts mit Memberfunktionen vs. normale Funktionen zu tun ;)

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

7

28.06.2011, 20:10

Gut gut. ich war durch den Post etwas verwirrt, nun bin ich mir aber wieder sicher. ^^
Das mit dem impliziten this-Pointer hatte ich so auch noch im Kopf. Danke für die Klärung. Wahrscheinlich hab ich zu schnell gelesen und irgendetwas übersehen. ^^

Werbeanzeige