Code mixte c/c++

Code mixte c/c++ - C++ - Programmation

Marsh Posté le 20-06-2005 à 09:18:50    

Bonjour  
Je réalise un lecteur audio.Celui-ci est dans un projet MFC en language c++.
 
Seluement je dois créer des fonctions mais qui celles-ci sont en language c.
Est-ce que cela ne pose pas de problème?  
Dois-je mettre les fonctions en codes C dans un autre fichier sorce?
 
Merci

Reply

Marsh Posté le 20-06-2005 à 09:18:50   

Reply

Marsh Posté le 20-06-2005 à 09:29:48    

oui et le compiler comme C

Reply

Marsh Posté le 20-06-2005 à 09:33:49    

Excuses-moi pour mes lacunes en programmation mais qu'est-ce que tu entends par le compiler comme C? Car lorsque je compile que ce soit en c ou en c++ j'utilise la meme fonctions ds vs++.

Reply

Marsh Posté le 20-06-2005 à 09:41:54    

alors tu ne fais jamais que du C++

Reply

Marsh Posté le 20-06-2005 à 09:44:14    

Pourrais-tu donc me dire, si cela ne te déranges pas comment dois-je faire pour allier les deux?

Reply

Marsh Posté le 20-06-2005 à 09:54:16    

_TomTom_ a écrit :

Pourrais-tu donc me dire, si cela ne te déranges pas comment dois-je faire pour allier les deux?


 
Comme dit précédemment, tu mets les fonctions C dans des sources C, que tu compiles en C (voir avec ton compilateur pour le paramétrer comme il faut, peut-être qu'avec la bonne extension c'est automatique ?).
Tu compiles ça en lib (DLL je pense), pas en exécutable.
 
Encadrer tes fonctions dans le .h correspondant par :

Code :
  1. #ifdef __cplusplus
  2. extern "C" {
  3. #endif
  4. /* declaration de fonctions C ici */
  5. #ifdef __cplusplus
  6. }
  7. #endif


 
 
Dans ton projet C++, tu inclues le fichier .h qui va bien, tu inclues dans ton projet la DLL nouvellement créée, et voila.

Reply

Marsh Posté le 20-06-2005 à 09:56:25    

Merci Elmoricq

Reply

Marsh Posté le 20-06-2005 à 14:58:00    

Si tu mets l'extension .c à ton code source, VC++ compilera ça comme du C.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 20-06-2005 à 15:19:13    

Maintenant g un problème pour ouvrir mes fichiers.
 
En effet lorsque j'ouvre un fichier avec mon code c++, le type de fichier est CString.  
Or les fonctions C que j'utilisent dans mon fichier C ont besoin que le type du ficher soit char.
 
La variable en c++ s'appellent m_Name et celle du code c est filename.
 
La fonction c est blabla(filename,int playfile).
 
Dans la fonction c++ le fichier est ouvert de la facon suivante: CFileDialog avi(...)

Reply

Marsh Posté le 20-06-2005 à 15:23:13    

CString tmp;
POSITION p=avi.GetStartPosition()
while(p!=NULL)
{
     tmp=avi.GetNextPathName(p);
     int pos =tmp.reverseFind('\\');
     m_path=tmp.Mid(o,pos);
     tmp= tmp.Mid(pos + 1,tmp.GetLenght());
     m_Name=tmp;
     m_ListSong.AddString(tmp);
 

Reply

Marsh Posté le 20-06-2005 à 15:23:13   

Reply

Marsh Posté le 20-06-2005 à 15:24:53    

alors que la fonction C utilise fopen pour ouvrir un fichier.
Je pense que la solution au probleme viendrai du lien a faire avec CString m_Name et char filename mais je n'y arrive pas...

Reply

Marsh Posté le 20-06-2005 à 15:54:56    

CString a un cast automatique en char *
tu peux faire:
 
CString Txt;
.....
char *ptr=Txt;
.....
CString n(ptr);
 
.........
 
pour tout ce qui est C++, tu utilises CString ou std::string, tu évites (const) char * dans tes membres de classes....

Reply

Marsh Posté le 20-06-2005 à 16:02:00    

merci, j'essaie tout de suite

Reply

Marsh Posté le 20-06-2005 à 16:06:33    

Ca ne marche pas , il me réponds cannot convert from 'class CString' to 'char*'

Reply

Marsh Posté le 20-06-2005 à 16:19:15    

Montre comment tu fais.

Reply

Marsh Posté le 20-06-2005 à 16:54:48    

CString m_Name;
 
char *filename=m_Name;
 

Reply

Marsh Posté le 20-06-2005 à 16:58:44    

Le tout étant de transformer un CString en char * afin de pouvoir utiliser la fonction read(char *,int)

Reply

Marsh Posté le 20-06-2005 à 18:23:01    

c'est pas suffisant comme code.

Reply

Marsh Posté le 22-06-2005 à 23:37:33    

je ne connait pas la difference entre string et cstring mais avec string il y a string.c_str() alors peut être que cstring la aussi

Reply

Marsh Posté le 23-06-2005 à 10:06:38    

toujours pas résolu ton pb ?
 
ha oui c'est un problème de constness.
 
CString yop;
 
c'est: const char *ptr=Yop;
et pas: char *ptr=Yop;

Reply

Marsh Posté le 25-06-2005 à 12:04:06    

T'as essayé avec CString.GetBuffer(1)?

Reply

Marsh Posté le 28-06-2005 à 10:31:02    

Merci!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed