Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Integration C / C#

2 réponses
Avatar
Marc Boyer
Bonjour à tous,

dans le cadre d'un projet à venir, nous allons devoir intégrer
de code C et du C#, et j'essaye d'évaluer la difficulté.

Actuellement, nous avons un code (numérique) en C. Il faut
qu'il puisse communiquer avec du C#. Après quelques
lectures, je vois plusieurs pistes.

a) Une DLL C appellée par C#:
On encapsule les fonctions C dans une DLL, et on l'appelle
depuis un coeur de code C#. Ca à l'air facile. Mais le
code C ne peut pas appeller de C#.

b) Copier/coller le code C dans du C#:
C# semble un (quasi) sur-ensemble de C. On doit pouvoir
copier/coller le code C et le passer au compilo C#.
Mais il semble que C# soit intéprété. Est-ce vrai ?
Cela peut-il poser un pb de perfs (c'est pour embarquer
sur un PDA, pas une machine de bureau).

d) Appeller du C# depuis du C
Est-ce possible ?

c) Du C .Net et du C#
Faire un composant .Net (ou COM ?) en C, un autre en
C#, et les faire communiquer. Mais ça a l'air lourd.

Qu'en pensez-vous ?

Merci d'avance,
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)

2 réponses

Avatar
Remi THOMAS
"Marc Boyer" écrivit

Bonjour

Bonjour à tous,

dans le cadre d'un projet à venir, nous allons devoir intégrer
de code C et du C#, et j'essaye d'évaluer la difficulté.

Actuellement, nous avons un code (numérique) en C. Il faut
qu'il puisse communiquer avec du C#. Après quelques
lectures, je vois plusieurs pistes.

a) Une DLL C appellée par C#:
On encapsule les fonctions C dans une DLL, et on l'appelle
depuis un coeur de code C#. Ca à l'air facile. Mais le
code C ne peut pas appeller de C#.



C'est ce que l'on appelle p/invoke.
Existe sur PC et PDA (.NET Framework et .NET Compact Framework)


b) Copier/coller le code C dans du C#:
C# semble un (quasi) sur-ensemble de C. On doit pouvoir
copier/coller le code C et le passer au compilo C#.
Mais il semble que C# soit intéprété. Est-ce vrai ?
Cela peut-il poser un pb de perfs (c'est pour embarquer
sur un PDA, pas une machine de bureau).




Le compilateur C# génére du pcode appelé MSIL. Le MSIL est compilé en
assembleur à la volé lors de l'execution, ceci est fait par la CLR (je te
laisse chercher les acronymes). C'est donc un peu (20 à 50%) moins rapide,
mais c'est très variable suivant les algorithmes.

d) Appeller du C# depuis du C
Est-ce possible ?




Sur PC oui, mais c'est du C++ (et pas du C) et dans ce cas le compilateur
crée du MSIL depuis le C++. Donc le C++ est aussi rapide que le C#.
Sur PDA non.

c) Du C .Net et du C#
Faire un composant .Net (ou COM ?) en C, un autre en
C#, et les faire communiquer. Mais ça a l'air lourd.




C'est effectivement lourd sur PC et pas possible sur PDA (.NET Compact
Framework ne connait pas COM)

Qu'en pensez-vous ?




Tu peux aussi lire cet article
http://www.techheadbrothers.com/Articles.aspx?IdÇd58966-f33e-4fc2-aa4d-452979a97888
où j'ai essayé d'être didactique et pragmatique. Mais pas possible sur PDA.

Je pense que si les performances sont importantes il faut rester en C. Le
.NET Compact Framework fonctionne bien mais ce n'est pas un foudre de
rapidité. Sur une grosse application avec essentiellement des écrans de
saisie la vitesse fut limite.

Rémi
Avatar
Marc Boyer
Le 22-03-2007, Remi THOMAS a écrit :
"Marc Boyer" écrivit

Bonjour

Bonjour à tous,

dans le cadre d'un projet à venir, nous allons devoir intégrer
de code C et du C#, et j'essaye d'évaluer la difficulté.

Actuellement, nous avons un code (numérique) en C. Il faut
qu'il puisse communiquer avec du C#. Après quelques
lectures, je vois plusieurs pistes.

a) Une DLL C appellée par C#:
On encapsule les fonctions C dans une DLL, et on l'appelle
depuis un coeur de code C#. Ca à l'air facile. Mais le
code C ne peut pas appeller de C#.



C'est ce que l'on appelle p/invoke.
Existe sur PC et PDA (.NET Framework et .NET Compact Framework)



OK, merci. Une fois qu'on a le mot clef, google aide mieux.

b) Copier/coller le code C dans du C#:
C# semble un (quasi) sur-ensemble de C. On doit pouvoir
copier/coller le code C et le passer au compilo C#.
Mais il semble que C# soit intéprété. Est-ce vrai ?
Cela peut-il poser un pb de perfs (c'est pour embarquer
sur un PDA, pas une machine de bureau).




Le compilateur C# génére du pcode appelé MSIL. Le MSIL est compilé en
assembleur à la volé lors de l'execution, ceci est fait par la CLR (je te
laisse chercher les acronymes).



Sans problème.

C'est donc un peu (20 à 50%) moins rapide,
mais c'est très variable suivant les algorithmes.



Oui, ce sera la première piste à explorer.

d) Appeller du C# depuis du C
Est-ce possible ?




Sur PC oui, mais c'est du C++ (et pas du C) et dans ce cas le compilateur
crée du MSIL depuis le C++. Donc le C++ est aussi rapide que le C#.
Sur PDA non.



OK

c) Du C .Net et du C#
Faire un composant .Net (ou COM ?) en C, un autre en
C#, et les faire communiquer. Mais ça a l'air lourd.




C'est effectivement lourd sur PC et pas possible sur PDA (.NET Compact
Framework ne connait pas COM)



OK

Qu'en pensez-vous ?




Tu peux aussi lire cet article
http://www.techheadbrothers.com/Articles.aspx?IdÇd58966-f33e-4fc2-aa4d-452979a97888
où j'ai essayé d'être didactique et pragmatique. Mais pas possible sur PDA.

Je pense que si les performances sont importantes il faut rester en C. Le
.NET Compact Framework fonctionne bien mais ce n'est pas un foudre de
rapidité. Sur une grosse application avec essentiellement des écrans de
saisie la vitesse fut limite.



OK, merci pour toutes ces infos.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)