Pb ac CoCreateInstance() [Résolu]

Signaler
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
-
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
-
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
A voir également:

12 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Oups:
gBuilder->lpVtbl->QueryInterface(IID_IMediaControl, (LPVOID*)&mControl);

C++ (@++)<!--
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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++ (@++)<!--
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Essaye Strmiids.lib...
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Passe par la table virtuelle

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

C++ (@++)<!--
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
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
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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++ (@++)<!--
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
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
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Merci =)

Neo_Fr