Pb ac CoCreateInstance()

Résolu
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 - 23 oct. 2007 à 22:00
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 - 24 oct. 2007 à 21:48
Bonsoir,
Je suis en train d'essayer de faire un ptit player mp3 avec DirectShow mais j'ai un pb avec CoCreateInstance ca me sort cette erreur a la compilation:

.\Song.c(10) : error C2440: 'fonction' : impossible de convertir de 'const GUID' en 'const IID *const '

J'apelle CoCreateInstance comme ca:
CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (LPVOID*)&gBuilder);

Je vois pas trop d'ou ca peut venir, dans les quelques exemples que j'ai trouvé CoCreateInstance est appelé pareille...

Neo_Fr

12 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 oct. 2007 à 22:22
Si tu compiles en C alors essaie (pas le temps):
CoCreateInstance(&CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER, &IID_IGraphBuilder, (LPVOID*)&gBuilder);

ciao...
BruNews, MVP VC++
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
23 oct. 2007 à 22:32
Oups:
gBuilder->lpVtbl->QueryInterface(IID_IMediaControl, (LPVOID*)&mControl);

C++ (@++)<!--
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 oct. 2007 à 22:34
La compil C++ masque les choses, toutes les méthodes COM en C se font explicitement via la vtable comme dit par SAK plus haut.

ciao...
BruNews, MVP VC++
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
23 oct. 2007 à 22:40
QueryInterface demande 3 paramètres.
Le premier paramètre est un pointeur vers la structure. Ici, il s'agit de gBuilder. Devrait allez pour le reste.

C++ (@++)<!--
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
24 oct. 2007 à 21:45
Essaye Strmiids.lib...
3
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
23 oct. 2007 à 22:29
Merci ca marche, mais il me reste une erreur:

.\Song.c(11) : error C2039: 'QueryInterface' : n'est pas membre de 'IGraphBuilder'
gBuilder->QueryInterface(IID_IMediaControl, (LPVOID*)&mControl);

Tu sais pas d'ou ca pourrait venir?

Neo_Fr
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
23 oct. 2007 à 22:31
Passe par la table virtuelle

gBuilder->-lpVtbl->QueryInterface(IID_IMediaControl, (LPVOID*)&mControl);

C++ (@++)<!--
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
23 oct. 2007 à 22:36
Ca me laisse tjrs un erreur:
.\Song.c(11) : error C2198: 'fonction via pointeur' : pas assez d'arguments pour un appel

gBuilder->lpVtbl->QueryInterface(&IID_IMediaControl, (LPVOID*)&mControl);

Neo_Fr
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
23 oct. 2007 à 23:05
C bizarre si je declare les interfaces dans une structure ca me met plein d'erreurs...

typedef struct _song
{
char FilePath[MAX_PATH+4];
char* FullName;
char* Artist;
char* Title;
BYTE State;
IGraphBuilder* gBuilder;
IBaseFilter* bFilter;
IBasicAudio* bAudio;
IMediaSeeking* mSeeking;
IPin* Pin;
}SONG, *LPSONG;

Song.h(18) : error C2061: erreur de syntaxe : identificateur 'IGraphBuilder'
Song.h(19) : error C2143: erreur de syntaxe : absence de '{' avant '*'
Song.h(20) : error C2143: erreur de syntaxe : absence de '{' avant '*'
Song.h(21) : error C2143: erreur de syntaxe : absence de '{' avant '*'
Song.h(22) : error C2143: erreur de syntaxe : absence de '{' avant '*'
Song.h(23) : error C2059: erreur de syntaxe : '}'

Sinon ya un truc que j'ai pa bien compris a chaque fois qu'il manque un parametre (QueryInterface, Run, Stop, Render...) il faut que je rajoute un pointeur sur la structure?

Ex:
bAudio->lpVtbl->FindPin(&bAudio, L"Output", &Pin); ??
gBuilder->lpVtbl->AddFilter(&gBuilder, bAudio, 0); ??
mControl->lpVtbl->Run(&mControl); ??

Neo_Fr
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
23 oct. 2007 à 23:09
Oui. Sauf que bAudio, gBuilder, mControl sont déjà des pointeurs donc pas de &

bAudio->lpVtbl->FindPin(bAudio, L"Output", &Pin);
gBuilder->lpVtbl->AddFilter(gBuilder, bAudio, 0);
mControl->lpVtbl->Run(mControl);

C++ (@++)<!--
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
23 oct. 2007 à 23:32
J'ai inclu dshow.h et linker avec winmm.lib mais j'ai tjrs ces erreurs:

Song.obj : error LNK2001: symbole externe non résolu _IID_IGraphBuilder
Song.obj : error LNK2001: symbole externe non résolu _CLSID_FilterGraph
Song.obj : error LNK2001: symbole externe non résolu _IID_IBasicAudio
Song.obj : error LNK2001: symbole externe non résolu _IID_IMediaSeeking
Song.obj : error LNK2001: symbole externe non résolu _IID_IMediaControl

J'ai oublier une lib?

Neo_Fr
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
24 oct. 2007 à 21:48
Merci =)

Neo_Fr
0
Rejoignez-nous