IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

include headers c dans un prog en c++


Sujet :

C++

  1. #1
    Membre �clair� Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par d�faut include headers c dans un prog en c++
    Bonjour,

    J'essaye d'utiliser vlc dans mon programme, j'ai trouv� sur un site que pour pouvoir includer des sources en c il fallait faire un extern "C" comme suit dans le code.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
    #include <windows.h>
     
    extern "C" {
       #include <vlc/libvlc.h>
    }
     
     
    int main() {
     
       return 0;
    }
    que je le fasse ou que je le fasse pas j'ai une erreur "...was not declred in this scope".

    Est-ce une erreur d�e au fait que le header soit en c et que mon compilateur compile du c++???
    Et comment r�soudre cela?


    Merci!

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par d�faut
    euh stdio.h est un header C aussi :p

    plus s�rieusement tu peux l'inclure sans passer par le extern "C"

  3. #3
    Membre �clair� Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par d�faut
    plus s�rieusement tu peux l'inclure sans passer par le extern "C"
    Je parle de l'include "#include <vlc/libvlc.h>" ligne 4 (sans compter les lignes vides).

    Justement j'ai fait un include "normal" et un include avec extern C et les deux me renvoient l'erreur : "...was not declred in this scope" qui pointe sur une ligne du header libvlc.h

    Est-ce que c'est une erreur dans le header?
    Est-ce qu'il faut faire une manip sp�ciale?

  4. #4
    Membre �m�rite Avatar de valefor
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    711
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 711
    Par d�faut
    Il y a vraiment trois petits points ? Ou tu �cris cela parceque tu en a trop ?

  5. #5
    Membre �clair� Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par d�faut
    Citation Envoy� par valefor Voir le message
    Il y a vraiment trois petits points ? Ou tu �cris cela parceque tu en a trop ?
    parceque je suis fain�ant!

    Voila la totalit� du message d'erreur :
    .\vlc\libvlc.h|33|warning: `vlc_key_to_action' initialized and declared `extern'|
    .\vlc\libvlc.h|33|error: `vlc_object_t' was not declared in this scope|
    .\vlc\libvlc.h|33|error: expected primary-expression before ',' token|
    .\vlc\libvlc.h|33|error: expected primary-expression before "const"|
    .\vlc\libvlc.h|34|error: `vlc_value_t' was not declared in this scope|

    ...

    .\vlc\libvlc.h|139|error: expected `;' before '*' token|
    .\vlc\libvlc.h|140|error: `vlc_mutex_t' does not name a type|
    .\vlc\libvlc.h|144|error: `vlc_thread_t' does not name a type|
    .\vlc\libvlc.h|145|error: `vlc_bool_t' does not name a type|
    ||More errors follow but not being shown.|
    ||Edit the max errors limit in compiler options...|
    ||=== Build finished: 50 errors, 2 warnings ===|
    les trois points au milieu c'est qu'il y'en a effectivement beaucoup.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifndef LIBVLC_LIBVLC_H
    # define LIBVLC_LIBVLC_H 1
     
    extern const char vlc_usage[];
     
    /* Hotkey stuff */
    extern const struct hotkey libvlc_hotkeys[];
    extern const size_t libvlc_hotkeys_size;
    extern int vlc_key_to_action (vlc_object_t *, const char *,
                                  vlc_value_t, vlc_value_t, void *);
    La ligne 33 correspond � l'avant derni�re ligne : "extern int vlc_key_to_action (vlc_object_t *, const char *,"

  6. #6
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par d�faut
    est ce que tu as linker la librairie correspondante ?

  7. #7
    Membre �m�rite Avatar de valefor
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    711
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 711
    Par d�faut
    Cela n'a pas l'air d'un probl�me de link mais bien de compilation.

    Il faudrait que tu trouves un autre projet qui utilise vlc pour voir les headers � inclure. Il t'en manque peut �tre.

    Autre piste, il faut d�finir une constante � la compile (option -D avec gcc), ou avant d'include le header (avec #define).

    Enfin, voir si dans le <vlc/libvlc.h> il n'y a pas des #ifndef __cplus_cplus (ou truc du style).

  8. #8
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par d�faut
    ca peut �tre un pb de link si les variables sont d�finis dans un .cpp qui a �t� compil� (maitenant je pense que c'est tordu de faire comme ca mais...)

  9. #9
    Membre �clair� Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par d�faut
    Pour r�pondre a valefor j'ai trouv� un tuto sur le site de vlc


    http://wiki.videolan.org/LibVLC_Tutorial_086c

    ci dessous le code qu'ils proposent :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    #include <stdio.h>
    #include <windows.h>
    #include <vlc/libvlc.h>
     
    static void quit_on_exception (libvlc_exception_t *excp) {
       if (libvlc_exception_raised (excp)) {
          fprintf(stderr, "error: %s\n", libvlc_exception_get_message(excp));
          exit(-1);
       }
    }
     
    int main(int argc, char **argv) {
       libvlc_exception_t excp;
       libvlc_instance_t *inst;
       int item;
       char *myarg0 = "-I";  char *myarg1 = "dummy";
       char *myarg2 = "--plugin-path=c:\\program files\\videolan\\plugins";
       char *myargs[4] = {myarg0, myarg1, myarg2, NULL};
       char *filename = "c:\\video\\main\\Everybody_Hates_Chris_Feb_26.mpg";
     
       libvlc_exception_init (&excp);
       inst = libvlc_new (3, myargs, &excp);
       quit_on_exception (&excp);
       item = libvlc_playlist_add (inst, filename, NULL, &excp); 
       quit_on_exception (&excp);
       libvlc_playlist_play (inst, item, 0, NULL, &excp); 
       quit_on_exception (&excp);
       Sleep (10000);
       libvlc_destroy (inst);
       return 0;
    }
    et un makefile

    VLC_INST = "c:\program files\videolan"
    VLC_SRC = "c:\tools\vlc-0.8.6c\"
    demo: demo.c
    gcc -o demo demo.c -I$(VLC_SRC)/include \
    -L$(VLC_INST) -llibvlc
    Y'a pas de define en plus, je vois pas d'appel particulier.

  10. #10
    Membre �m�rite Avatar de valefor
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    711
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 711
    Par d�faut
    Tu as essay� de compiler le tuto (en c donc) ?

  11. #11
    Membre �clair� Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par d�faut
    Tu as essay� de compiler le tuto (en c donc) ?
    arghhh ca ce complique!!

    1) cf mon titre j'essaye de faire appel � des sources en c dans mon prog en c++

    2) j'ai des erreurs je poste sur le forum en demandant si y'a une manip sp�cial pour faire cohabiter les sources de libvlc en c avec du c++

    3) j'ai mis mon code en exemple (toujours mon premier post).

    4) vous m'aidez pour trouver une solution et je vous en remercie.

    4 bis) tu proposes (valefor) de rajouter un include
    Citation Envoy� par valefor
    Il faudrait que tu trouves un autre projet qui utilise vlc pour voir les headers � inclure. Il t'en manque peut �tre.
    5) je te montre un exemple en c que je n'ai pas essay� de compiler mais qui fait un simple appel a libvlc, en r�ponse � ta proposition.

    Mon but initial c'est de faire appel a libvlc dans mon programme en c++ donc j'essaye en faisant un simple include et j'ai des messages d'erreurs.

    Merci pour votre aide.

  12. #12
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par d�faut
    est ce que tu pourrais joindre une archive contenant tout (avec les sources et lib vlc !) comme ca je peux regarder ca cette aprem car je pense qu'on parle de choses mais pas des m�me

  13. #13
    Membre �clair� Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par d�faut
    Merci pour ton aide,

    les sources pour l'instant y'a pas grand chose de mon cot� vu que c'est dans un but de test. Mon objectifs c'est de pouvoir acc�der � l'api vlc via mon appli.

    mon appli se limite � ca, un appel a libvlc :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    #include <vlc/libvlc.h>
     
    int main() {
     
       return 0;
    }
    et les sources de vlc tu peux les trouver la :
    http://www.videolan.org/vlc/download-sources.html

    soit en tar.gz ou tar.bz2

  14. #14
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par d�faut
    et tu arrives � compiler rien qu'en testant avec le main ou non ?

  15. #15
    Membre �m�rite Avatar de valefor
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    711
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 711
    Par d�faut
    Par rapport � ta remarque grabriel (ton post #11), je te donne DES pistes � explorer. Ne te trouve pas d�sorient�. Tu prends/fais ce que tu veux avec ces id�es.

    L'id�e de partir du tutorial �tait d'appliquer la m�thode :
    - je pars d'un truc qui marche
    - tant que ca marche je modifie petit � petit jusqu'� arriver � ce que je veux.

    Voila.

    Sur ce forum, outre des solutions techniques, on trouve aussi, parfois, des m�thodes.

  16. #16
    Membre �clair� Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par d�faut
    Citation Envoy� par valefor Voir le message
    Par rapport � ta remarque grabriel (ton post #11), je te donne DES pistes � explorer. Ne te trouve pas d�sorient�. Tu prends/fais ce que tu veux avec ces id�es.

    L'id�e de partir du tutorial �tait d'appliquer la m�thode :
    - je pars d'un truc qui marche
    - tant que ca marche je modifie petit � petit jusqu'� arriver � ce que je veux.

    Voila.

    Sur ce forum, outre des solutions techniques, on trouve aussi, parfois, des m�thodes.
    Sauf que je suis � la phase 1 avec quelque chose qui ne marche pas!!

    Si on reprends mon code du premier message j'ai juste un #include <vlc/libvlc.h> y'en a d'autres mais c'est des restes que j'ai oubli� d'enlever.

    Mais je reste sur un code modeste qui tient en 3 lignes :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    #include <vlc/libvlc.h>
     
    int main() {
     
       return 0;
    }
    et que je n'arrive pas a compiler!

    J'essaye de comprendre le pourquoi des erreurs et je propose une piste qui peux �tre :" est-ce qu'il y'a une manip sp�ciale pour que je puisse faire un include de fichiers c via mon prog en c++?"

    Pour ca j'ai fait des recherches et j'ai trouv� un site qui me disait de rajouter :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    extern "C" {
       #include <vlc/libvlc.h>
    }
    Mais avec ou sans j'ai le m�me message d'erreur. Et hiko-seijuro de confirmer :
    Citation Envoy� par hiko-seijuro
    tu peux l'inclure sans passer par le extern "C"

    Voila ma m�thode jusqu'� maintenant!

  17. #17
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par d�faut
    ca va te paraitre idiot mais c'est quoi ta commande compilation ? car chez moi ca marche parfaitement :s

  18. #18
    Membre �clair� Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par d�faut
    ca va te paraitre idiot mais c'est quoi ta commande compilation ? car chez moi ca marche parfaitement :s
    Non ca me parait compl�tement cens�!

    J'ai pas suffisement cherch� de ce c�t�.

    ---Apr�s avoir v�rifi� dans code::blocks les diff�rents param�tres----

    Il y'avais dans les options de compilation un chemin avec un "." que j'ai forc�ment pas vu

    J'ai essay� en ligne de commande en rajoutant -I. et �a me g�n�re la m�me erreur.

    Du coup je l'ai enlev� et ca compile bien!! (i.e. �a ne me retourne plus l'erreur)

    Merci � vous deux pour votre aide et votre temps!!

    d�sol�!!!

    Au moins j'ai eu le temps de bien lire toute la doc sur l'api de vlc, j'ai pas tant perdu mon temps que �a!!

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [compil] #include <header> ou #include <head
    Par guejo dans le forum MFC
    R�ponses: 5
    Dernier message: 02/06/2004, 15h31
  2. Comment peut on integer des controles dans un prog opengl
    Par franck31400 dans le forum OpenGL
    R�ponses: 2
    Dernier message: 28/04/2004, 09h06
  3. [LG]tache en parrallèle dans un prog
    Par max_lupin dans le forum Langage
    R�ponses: 4
    Dernier message: 25/02/2004, 18h38
  4. R�ponses: 1
    Dernier message: 19/08/2003, 16h11
  5. [TP]Peut-on mettre un commande dos dans le prog?
    Par pierre olmes dans le forum Turbo Pascal
    R�ponses: 22
    Dernier message: 24/05/2003, 22h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo