[BC++] functie pointer probleem

Pagina: 1
Acties:

  • Baron
  • Registratie: Juli 2000
  • Laatst online: 21-06 17:02
Ik heb lib-functies die als volgt zijn gedeclareerd:
code:
1
2
typedef signed char (_cdecl *FSOUND_STREAMCALLBACK) (FSOUND_STREAM *stream, void *buff, int len, int param);
__declspec(dllexport) signed char _stdcall FSOUND_Stream_SetEndCallback(FSOUND_STREAM *stream, FSOUND_STREAMCALLBACK endcallback, int userdata);

FSOUND_Stream_SetEndCallback stelt een functie (endcallback) in wanneer het einde van de stream wordt bereikt

Mijn endcallback methode is als volgt:
code:
1
2
3
4
5
signed char FModPlayer::endcallback(FSOUND_STREAM * stream, void * buff, int len, int param)
{
   // einde bereikt
   return TRUE;
}

Om het einde van de stream in te stellen roep ik deze functie aan:

FSOUND_Stream_SetEndCallback(stream, endcallback, 0);

Hierop krijg ik deze fout
code:
1
2
3
[C++ Error] Unit2.cpp(52): E2034 Cannot convert 
'signed char (* (_closure )(FSOUND_STREAM *,void *,int,int))(FSOUND_STREAM *,void *,int,int)' to 
'signed char (*)(FSOUND_STREAM *,void *,int,int)'

Weet iemand hoe ik dit kan oplossen ??

Gooi ik de endcallback methode functie uit de class

signed char endcallback(FSOUND_STREAM * stream, void * buff, int len, int param)
{
// einde bereikt
return TRUE;
}

dan lukt het wel.

Verwijderd

Nee... beetje te ingewikkeld voor mij :'(

  • whoami
  • Registratie: December 2000
  • Laatst online: 04-09 22:16
Op donderdag 27 juni 2002 10:35 schreef Pjotr223 het volgende:
Nee... beetje te ingewikkeld voor mij :'(
Als je niets te zeggen hebt, zeg dan ook niets. Of ben je soms tech-posts aan het scoren om HK - toegang te verkrijgen. :(

https://fgheysels.github.io/


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 04-09 22:38
Simpel: Class methods hebben een this pointer, die meetelt in de signature. De callback levert geen 'this' pointer mee, dus je kunt geen class methods aanroepen.

Er is een standaard oplossing voor: static class methods hebben geen 'this' pointer, dus dezelfde signature als een non-class method met dezelfde argumenten.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Baron
  • Registratie: Juli 2000
  • Laatst online: 21-06 17:02
Is er geen andere oplossing dan?

Het enige wat ik wil bereiken is de lib van http://www.fmod.org omzetten in een c++ class.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17:11
Een vergelijkbaar probleem heb je als je threads wilt wrappen in een klasse. Je zult op een of andere manier een boekhouding moeten gaan bijhouden die de callbacks forward naar je object.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 04-09 22:38
Op donderdag 27 juni 2002 12:46 schreef Baron het volgende:
Het enige wat ik wil bereiken is de lib van http://www.fmod.org omzetten in een c++ class.
Wat is er dan mis met een class-static method?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1