9
votes

Est-il possible d'intégrer C code C dans un projet C #?

Je sais qu'il est possible de compiler mon code C dans une DLL, puis d'utiliser p / invoke pour appeler ce code.

Ce que je me demandais s'il était possible d'avoir une partie du code C intégré directement dans mon code , peut-être seulement disponible sur une classe ... p>

Quelque chose comme ça (non-travail) Exemple: p>

public class MyClass {
    extern "C" {
        int do_something_in_c(int i) {
            return i*2;
        }
    }

    public int DoSomething(int value) {
        return do_something_in_c(value);
    }
}


0 commentaires

4 Réponses :


2
votes

Ce n'est pas possible. Tandis que c # prend en charge Code dangereux (pointeurs), Il n'est pas compatible avec C ou C ++


0 commentaires

8
votes

Il est possible de créer un ensemble de mode mixte (c'est-à-dire celui qui a un code géré et natif), mais seul le compilateur C ++ / CLI peut en produire un. Ce que vous cherchez à faire n'est pas pris en charge par le compilateur C #.


0 commentaires

0
votes

IMHO, ce n'est pas possible, car c est une langue dangereuse et non gérée. En outre, C # a toutes les caractéristiques importantes de c sauf les pointeurs.


2 commentaires

C # fait des pointeurs de support - msdn.microsoft.com/ EN-US / Bibliothèque / AA664769 (v = vs.71) .aspx


Mon mauvais .. mais je ne l'ai pas considéré depuis que c'est dangereux.



1
votes

Vous pouvez écrire et compiler votre code C en tant qu'assemblage normal (non -.net), puis p / l'invoquer:

[DllImport ("mylib.dll")]
private static extern int do_something_in_c(int i);

public int DoSomething(int value)
{
    return do_something_in_c(value);
}


2 commentaires

Le PO mentionne cela dans la première ligne de la question.


Oui. Je l'ai fait à l'origine. Mais cela semblait en quelque sorte inélégant. :)