OVH Cloud OVH Cloud

mélange Visual C/C++

7 réponses
Avatar
GG²
Bonjour,

J'ai 2 programmes, l'un écrit en C , et l'autre en C++.
Je souhaiterais pouvoir utiliser les fonctions du prog C++ (qui utilisent un
dll externe) dans mon programme C.
Il parait que l'on peut mixer les 2 sans problèmes.

J'ai vu quelques sites conseillant de passer le prog C vers C++, mais ils
n'indiquent pas la marche à suivre !
Donc, si quelqu'un a une idée, je suis preneur !

Merci d'avance !

gg

7 réponses

Avatar
Aurélien REGAT-BARREL
> J'ai 2 programmes, l'un écrit en C , et l'autre en C++.
Je souhaiterais pouvoir utiliser les fonctions du prog C++ (qui utilisent


un
dll externe) dans mon programme C.
Il parait que l'on peut mixer les 2 sans problèmes.




"Qui peut le plus peut le moins".
Utiliser du C depuis C++ est faisable facilement. L'inverse, c'est moins
simple, beaucoup moins.
http://msdn.microsoft.com/library/en-us/vclang/html/_pluslang_Linkage_to_Non.2d.C.2b2b_.Functions.asp

--
Aurélien REGAT-BARREL
Avatar
spi
Pas de problème,
fais juste attention de bien mettre une extension .c pour des fichiers c et
cpp pour les fichiers cpp, le VC++ en tient compte.
Pour declarer les includes contenant des déclarations de fctions C dans des
fichiers c++, tu peux utiliser la syntaxe suivante

extern "C" {
#include "file1.h"
#include "file2.h"
}
et si c'est juste des fctions
extern "C" int myfucn(char*c);


"GG²" a écrit dans le message de
news:camr8h$ht$
Bonjour,

J'ai 2 programmes, l'un écrit en C , et l'autre en C++.
Je souhaiterais pouvoir utiliser les fonctions du prog C++ (qui utilisent


un
dll externe) dans mon programme C.
Il parait que l'on peut mixer les 2 sans problèmes.

J'ai vu quelques sites conseillant de passer le prog C vers C++, mais ils
n'indiquent pas la marche à suivre !
Donc, si quelqu'un a une idée, je suis preneur !

Merci d'avance !

gg




Avatar
GG²
Est-ce que ça peut poser problèmes si le main est en C?
Dans ce cas , il faut juste mettre extern "C" devant comme toute autre
fonction?

Peut-on aussi utiliser des classes dans ces fonctions?


"spi" a écrit dans le message de news:
cb1eds$cu8$
Pas de problème,
fais juste attention de bien mettre une extension .c pour des fichiers c


et
cpp pour les fichiers cpp, le VC++ en tient compte.
Pour declarer les includes contenant des déclarations de fctions C dans


des
fichiers c++, tu peux utiliser la syntaxe suivante

extern "C" {
#include "file1.h"
#include "file2.h"
}
et si c'est juste des fctions
extern "C" int myfucn(char*c);


"GG²" a écrit dans le message de
news:camr8h$ht$
> Bonjour,
>
> J'ai 2 programmes, l'un écrit en C , et l'autre en C++.
> Je souhaiterais pouvoir utiliser les fonctions du prog C++ (qui


utilisent
un
> dll externe) dans mon programme C.
> Il parait que l'on peut mixer les 2 sans problèmes.
>
> J'ai vu quelques sites conseillant de passer le prog C vers C++, mais


ils
> n'indiquent pas la marche à suivre !
> Donc, si quelqu'un a une idée, je suis preneur !
>
> Merci d'avance !
>
> gg
>
>




Avatar
spi
J'avais mal lu ta question initiale. Tu ne dois pas faire appel à du c++, à
partir de c, le linker ne s'y retrouvera pas. Par contre tu peux appeler du
c à partir du c++ en suivant les directives indiquées dans les postes
précédents. Si tu nommes le fichier main.cpp et non main.c, et que tu
codes du C, VC++ s'y retrouvera, sinon tu obtiendras des messages au link,
indiquant que les noms de fonctions C++ n'ont pas pu être résolu.


"GG²" a écrit dans le message de
news:cb4gof$v0b$
Est-ce que ça peut poser problèmes si le main est en C?
Dans ce cas , il faut juste mettre extern "C" devant comme toute autre
fonction?

Peut-on aussi utiliser des classes dans ces fonctions?


"spi" a écrit dans le message de news:
cb1eds$cu8$
> Pas de problème,
> fais juste attention de bien mettre une extension .c pour des fichiers c
et
> cpp pour les fichiers cpp, le VC++ en tient compte.
> Pour declarer les includes contenant des déclarations de fctions C dans
des
> fichiers c++, tu peux utiliser la syntaxe suivante
>
> extern "C" {
> #include "file1.h"
> #include "file2.h"
> }
> et si c'est juste des fctions
> extern "C" int myfucn(char*c);
>
>
> "GG²" a écrit dans le message de
> news:camr8h$ht$
> > Bonjour,
> >
> > J'ai 2 programmes, l'un écrit en C , et l'autre en C++.
> > Je souhaiterais pouvoir utiliser les fonctions du prog C++ (qui
utilisent
> un
> > dll externe) dans mon programme C.
> > Il parait que l'on peut mixer les 2 sans problèmes.
> >
> > J'ai vu quelques sites conseillant de passer le prog C vers C++, mais
ils
> > n'indiquent pas la marche à suivre !
> > Donc, si quelqu'un a une idée, je suis preneur !
> >
> > Merci d'avance !
> >
> > gg
> >
> >
>
>




Avatar
GG²
oui mais si je ne peux pas faire appel à des classes C++, je peux pas
mélanger les 2 dans mon main !
Comment dois-je faire ?

"spi" a écrit dans le message de news:
cb9p0v$4sh$
J'avais mal lu ta question initiale. Tu ne dois pas faire appel à du c++,


à
partir de c, le linker ne s'y retrouvera pas. Par contre tu peux appeler


du
c à partir du c++ en suivant les directives indiquées dans les postes
précédents. Si tu nommes le fichier main.cpp et non main.c, et que tu
codes du C, VC++ s'y retrouvera, sinon tu obtiendras des messages au


link,
indiquant que les noms de fonctions C++ n'ont pas pu être résolu.


"GG²" a écrit dans le message de
news:cb4gof$v0b$
> Est-ce que ça peut poser problèmes si le main est en C?
> Dans ce cas , il faut juste mettre extern "C" devant comme toute autre
> fonction?
>
> Peut-on aussi utiliser des classes dans ces fonctions?
>
>
> "spi" a écrit dans le message de news:
> cb1eds$cu8$
> > Pas de problème,
> > fais juste attention de bien mettre une extension .c pour des fichiers


c
> et
> > cpp pour les fichiers cpp, le VC++ en tient compte.
> > Pour declarer les includes contenant des déclarations de fctions C


dans
> des
> > fichiers c++, tu peux utiliser la syntaxe suivante
> >
> > extern "C" {
> > #include "file1.h"
> > #include "file2.h"
> > }
> > et si c'est juste des fctions
> > extern "C" int myfucn(char*c);
> >
> >
> > "GG²" a écrit dans le message de
> > news:camr8h$ht$
> > > Bonjour,
> > >
> > > J'ai 2 programmes, l'un écrit en C , et l'autre en C++.
> > > Je souhaiterais pouvoir utiliser les fonctions du prog C++ (qui
> utilisent
> > un
> > > dll externe) dans mon programme C.
> > > Il parait que l'on peut mixer les 2 sans problèmes.
> > >
> > > J'ai vu quelques sites conseillant de passer le prog C vers C++,


mais
> ils
> > > n'indiquent pas la marche à suivre !
> > > Donc, si quelqu'un a une idée, je suis preneur !
> > >
> > > Merci d'avance !
> > >
> > > gg
> > >
> > >
> >
> >
>
>




Avatar
Alexandre
bonjour,

"GG²" a écrit dans le message de
news:cb9ro8$ict$
oui mais si je ne peux pas faire appel à des classes C++, je peux pas
mélanger les 2 dans mon main !
Comment dois-je faire ?



tu ne peux pas. Appeler des classes C++ dans un prog C est impossible.
Tu peux appeler des fonctions dans ton programme C, même si elles sont
codées en C++, mais elles doivent être déclarées comme ceci dans ton module
C++ :
extern "C" void mafonc();



"spi" a écrit dans le message de news:
cb9p0v$4sh$
> J'avais mal lu ta question initiale. Tu ne dois pas faire appel à du


c++,
à
> partir de c, le linker ne s'y retrouvera pas. Par contre tu peux appeler
du
> c à partir du c++ en suivant les directives indiquées dans les postes
> précédents. Si tu nommes le fichier main.cpp et non main.c, et que tu
> codes du C, VC++ s'y retrouvera, sinon tu obtiendras des messages au
link,
> indiquant que les noms de fonctions C++ n'ont pas pu être résolu.
>
>
> "GG²" a écrit dans le message de
> news:cb4gof$v0b$
> > Est-ce que ça peut poser problèmes si le main est en C?
> > Dans ce cas , il faut juste mettre extern "C" devant comme toute autre
> > fonction?
> >
> > Peut-on aussi utiliser des classes dans ces fonctions?
> >
> >
> > "spi" a écrit dans le message de news:
> > cb1eds$cu8$
> > > Pas de problème,
> > > fais juste attention de bien mettre une extension .c pour des


fichiers
c
> > et
> > > cpp pour les fichiers cpp, le VC++ en tient compte.
> > > Pour declarer les includes contenant des déclarations de fctions C
dans
> > des
> > > fichiers c++, tu peux utiliser la syntaxe suivante
> > >
> > > extern "C" {
> > > #include "file1.h"
> > > #include "file2.h"
> > > }
> > > et si c'est juste des fctions
> > > extern "C" int myfucn(char*c);
> > >
> > >
> > > "GG²" a écrit dans le message de
> > > news:camr8h$ht$
> > > > Bonjour,
> > > >
> > > > J'ai 2 programmes, l'un écrit en C , et l'autre en C++.
> > > > Je souhaiterais pouvoir utiliser les fonctions du prog C++ (qui
> > utilisent
> > > un
> > > > dll externe) dans mon programme C.
> > > > Il parait que l'on peut mixer les 2 sans problèmes.
> > > >
> > > > J'ai vu quelques sites conseillant de passer le prog C vers C++,
mais
> > ils
> > > > n'indiquent pas la marche à suivre !
> > > > Donc, si quelqu'un a une idée, je suis preneur !
> > > >
> > > > Merci d'avance !
> > > >
> > > > gg
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
spi
J'ai quand même l'impression que tu te poses un faux problème. Rien ne
t'empêche de coder tout en C, des fichiers d'extensions cpp. La seule
différence, c'est au moment de la compilation: la façon de nommer les
fonctions est différentes selon que le compilateur est C++ ou C, et VC++ se
sert de l'extension pour décider dans quel cas il se trouve. Tu peux t'en
moquer complètement, tu renommes tes fichiers coder en c, avec une extension
cpp et tu laisses VC++ se débrouiller.

int main() {
...
return (int)0;
}

c'est aussi du C++, simplement le nom généré par le compilo est différent
selon que le fichier s'appelle main.c ou main.cpp, c'est tout. Pour toi,
c'est transparent, le code est le même.


"GG²" a écrit dans le message de
news:cb9ro8$ict$
oui mais si je ne peux pas faire appel à des classes C++, je peux pas
mélanger les 2 dans mon main !
Comment dois-je faire ?

"spi" a écrit dans le message de news:
cb9p0v$4sh$
> J'avais mal lu ta question initiale. Tu ne dois pas faire appel à du


c++,
à
> partir de c, le linker ne s'y retrouvera pas. Par contre tu peux appeler
du
> c à partir du c++ en suivant les directives indiquées dans les postes
> précédents. Si tu nommes le fichier main.cpp et non main.c, et que tu
> codes du C, VC++ s'y retrouvera, sinon tu obtiendras des messages au
link,
> indiquant que les noms de fonctions C++ n'ont pas pu être résolu.
>
>
> "GG²" a écrit dans le message de
> news:cb4gof$v0b$
> > Est-ce que ça peut poser problèmes si le main est en C?
> > Dans ce cas , il faut juste mettre extern "C" devant comme toute autre
> > fonction?
> >
> > Peut-on aussi utiliser des classes dans ces fonctions?
> >
> >
> > "spi" a écrit dans le message de news:
> > cb1eds$cu8$
> > > Pas de problème,
> > > fais juste attention de bien mettre une extension .c pour des


fichiers
c
> > et
> > > cpp pour les fichiers cpp, le VC++ en tient compte.
> > > Pour declarer les includes contenant des déclarations de fctions C
dans
> > des
> > > fichiers c++, tu peux utiliser la syntaxe suivante
> > >
> > > extern "C" {
> > > #include "file1.h"
> > > #include "file2.h"
> > > }
> > > et si c'est juste des fctions
> > > extern "C" int myfucn(char*c);
> > >
> > >
> > > "GG²" a écrit dans le message de
> > > news:camr8h$ht$
> > > > Bonjour,
> > > >
> > > > J'ai 2 programmes, l'un écrit en C , et l'autre en C++.
> > > > Je souhaiterais pouvoir utiliser les fonctions du prog C++ (qui
> > utilisent
> > > un
> > > > dll externe) dans mon programme C.
> > > > Il parait que l'on peut mixer les 2 sans problèmes.
> > > >
> > > > J'ai vu quelques sites conseillant de passer le prog C vers C++,
mais
> > ils
> > > > n'indiquent pas la marche à suivre !
> > > > Donc, si quelqu'un a une idée, je suis preneur !
> > > >
> > > > Merci d'avance !
> > > >
> > > > gg
> > > >
> > > >
> > >
> > >
> >
> >
>
>