Возможно ли встроить код C в проект C #? - PullRequest
7 голосов
/ 20 мая 2010

Я знаю, что можно скомпилировать мой C-код в dll, а затем использовать P / Invoke для вызова этого кода.

Что меня удивило, было ли возможно иметь кусок кода на C, встроенный непосредственно в мой код, возможно, доступный только для одного класса ...

Пример примерно такой (нерабочий):

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);
    }
}

Я уже несколько часов пытаюсь использовать Visual Studio 2008, но никуда не денусь и подозреваю, что на самом деле это невозможно. Кто-нибудь может подтвердить или опровергнуть это?

Спасибо.

Ответы [ 4 ]

8 голосов
/ 20 мая 2010

Можно создать сборку смешанного режима (то есть ту, которая имеет как управляемый, так и собственный код), но только компилятор C ++ / CLI может создать одну из них.То, что вы хотите сделать, не поддерживается компилятором C #.

3 голосов
/ 20 мая 2010

Это невозможно. Хотя C # поддерживает небезопасный код (указатели), он не имеет обратной совместимости с C или C ++

2 голосов
/ 20 мая 2010

Вы можете написать и скомпилировать ваш код на C как обычную (не .NET) сборку, затем P / Invoke it:

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

public int DoSomething(int value)
{
    return do_something_in_c(value);
}
0 голосов
/ 20 мая 2010

ИМХО, это невозможно, поскольку C - небезопасный и неуправляемый язык. Кроме того, в C # есть все важные функции языка C, кроме указателей.

...