csauvane
Messages postés18Date d'inscriptionmardi 29 avril 2008StatutMembreDernière intervention17 janvier 2009
-
7 janv. 2009 à 21:18
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011
-
12 janv. 2009 à 22:25
Bonjour,
Pour suivre les contraintes d'un projet je dois développer une petite application permettant de lire/enregistrer, afficher et faire quelques effets sur les fichiers wave. Je ne connais pas encore l'API windows, et je dois travailler sous C++ Builder 6 (BCB6, soit BCB, pour les intimes ?). J'ai récupéré le tutoriel de très bonne qualité de cette adresse : http://www.planet-source-code.com/vb...=4422&lngWId=3 ; et tout fonctionne sauf la compilation finale : voici ma ligne erronée et l'erreur qui va avec :
Code :
A première vu tout semble normal dans l'utilisation des paramètres... Quelqu'un a-t-il l'expérience de cette erreur ? Si oui que faut-il faire ?
Indice : en double cliquant sur l'erreur, le curseur se place après le signe égal, la fonction HeapAlloc retourne un type ' LPVOID WINAPI ', buffer est un unsigned char* ...
csauvane
Messages postés18Date d'inscriptionmardi 29 avril 2008StatutMembreDernière intervention17 janvier 2009 11 janv. 2009 à 23:12
Ok, merci pour cette précision, j'ai trouvé la solution ! Je poste une dernière fois histoire d'afficher la réponse, qui était tout simplement...
... de retirer le passage par référence du projectWaveHandle pour que ceci :
Res = waveOutWrite(&projectWaveHandle, &projectWaveHeader, sizeof(WAVEHDR));
devienne :
Res = waveOutWrite(projectWaveHandle, &projectWaveHeader, sizeof(WAVEHDR));
Voilà !
Je tacherai de créer un topic à chaque fois, au debut je pensais utiliser ce topic pr la foule des petits pb que j'allais rencontrer, mais ça ne fonctionne pas comme ça...
csauvane
Messages postés18Date d'inscriptionmardi 29 avril 2008StatutMembreDernière intervention17 janvier 2009 9 janv. 2009 à 12:07
Bonjour,
J'ai maintenant un petit problème de déclaration de classe. J'utilise un classe trouvée sur http://www.cppfrance.com//code.aspx?ID=35447 ; dans mon programme principal j'inclus les entêtes comme suit :
Code :
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 9 janv. 2009 à 16:18
Ben si tu définis la même classe dans plusieurs fichiers, c'est normal qu'il te dises que tu redéclares ^^
#include est une directive pour le pré-processeur.
"Avant" la compilation, dis toi qu'à chaque ligne contenant #include "fichier.h", le pré-processeur va insérer le texte contenu dans le fichier.h.
Pour faire plus court (et donner moins de lignes à mon exemple), remplaçons ta classe CMutex par une bête variable A de type entier (int). Si tu la déclares dans chaque header, voilà ce que tu auras dans chacun de tes 9 headers :
int A;
Et voilà ce que tu obtiendras dans ton fichier .cpp après le boulot effectué par le pré-processeur (qui remplaces les lignes contenant #include) :
int A;
int A;
int A;
int A;
int A;
int A;
int A;
int A;
int A;
Ce qui revient donc à déclarer plusieurs fois la même variable (ou la même classe dans ton cas), ce qui n'est pas bon.
Par contre, es-tu sûr de ne pas avoir déclaré la classe avant d'inclure Mutex.h ? Parce-que même pour ce fichier il te signale un redéclaration, or d'après ce que tu écris, c'est ton premier header inclus.
Sinon, pour rester propre, déclare ta classe dans un header spécifique genre CMutex.h et ajoute un .cpp contenant les définitions des méthodes de la classe. (ou mets-les directement dans le header, mais c'est soit-disant moins rigoureux).
Je n'ai pas été hors-sujet ? ^^
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 9 janv. 2009 à 16:22
Désolé pour le double-posting.
Je viens d'aller voir la source de ton lien. La classe CMutex est bien définie uniquement dans le fichier Mutex.h
Les autres fichiers contiennent d'autres classes.
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 9 janv. 2009 à 16:31
Oui.
Mais ça revient à ce que je disais
En gros les 3 directives que tu cites signifient "si la classe décrite ci dessous n'est pas déjà déclarée, alors la déclarer, sinon ne rien faire".
Donc pour dans le 1er header, n'étant pas déclarée, ça l'a fait, mais pas dans les autres fichiers.
Mais euh.. tu te compliques grandement la vie. Ça ne sert à rien de déclarer 40 variables identiques en vérifiant chaque fois si elles ont été déclarées. Non seulement ça te rajoute des lignes de code pour rien, mais en plus tu perds en lisibilité, puis... ça sert à rien (dans ce cas là) ^^
Je suis parvenu a écrire un joli programme... La compilation fonctionne, l'exécution aussi sauf au moment de lancer la lecture du wav, à ce moment, en utilisant :
Code :
// read file !
Res = waveOutWrite(&projectWaveHandle, &projectWaveHeader, sizeof(WAVEHDR));
CheckWaveError(Res);
Memo1->Lines->Add("Playback started " + String(Res));
Je peux lire dans mon Mémo ( je code sous C++ Builder ) l'erreur 5, qui correspond à MMSYSERR_INVALHANDLE.
Je recherche sur internet mais pour le moment je ne trouve pas ma réponse.
Quelqu'un a-t-il une idée ?
Je suis parvenu a écrire un joli programme... La compilation fonctionne, l'exécution aussi sauf au moment de lancer la lecture du wav, à ce moment, en utilisant :
Code :
// read file !
Res = waveOutWrite(&projectWaveHandle, &projectWaveHeader, sizeof(WAVEHDR));
CheckWaveError(Res);
Memo1->Lines->Add("Playback started " + String(Res));
Je peux lire dans mon Mémo ( je code sous C++ Builder ) l'erreur 5, qui correspond à MMSYSERR_INVALHANDLE.
Je recherche sur internet mais pour le moment je ne trouve pas ma réponse.
Quelqu'un a-t-il une idée ?
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 11 janv. 2009 à 17:52
Salut,
Personnellement je ne sais pas, et ayant de gros problèmes avec mon PC, je ne peux pas faire de recherches.
Mais je pense que personne d'autre que moi ne viendra lire ton topic. Je m'explique :
A moins de décocher la checkbox "<label for="m_CPH1_UCForumHome1_Message_UCForumMessage1_FrmAjout_ctl00_MessageAdd_ChkAlerte">M'envoyer un mail lorsqu'il y a une réponse à cette discussion."</label>, dès qu'on a répondu au moins une fois sur un topic, on est prévenu par mail à chaque nouveau commentaire. Or je suis le seul (avec toi) à avoir répondu, donc je suis le seul au courant de tes 2 nouveaux problèmes que tu as eu
De plus, tu as mis 2 commentaires en "réponse acceptée", ce qui veut dire que dans le sommaire du forum, les gens verront que ton problème est résolu et ne prendront pas la peine de venir voir (logique).
Si tu veux plus d'aide, enlève les réponses acceptées ou fais carrément un nouveau topic parce-que je ne pense pas pouvoir t'aider.
Bonne chance.
salna
Messages postés42Date d'inscriptionvendredi 21 décembre 2007StatutMembreDernière intervention12 janvier 2009 12 janv. 2009 à 21:44
aide moi s-v-p
le probleme c'est:
ecrire un programme en c++ de ecran de veille acondition que
nous avans crier e timer et avec mot de passe.
merci d'avance.
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 12 janv. 2009 à 22:25
salna, si tu as un soucis, créé ton topic, et ne va pas pouiller celui des autres.
J'hallucine...
De plus, apparemment tu demandes un code tout fait, or ce n'est pas le but de ce forum.
A bon entendeur.