Действительно ли возможно встроить код C в проекте C#?

Я знаю, что возможно скомпилировать мой код 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, но я не добираюсь нигде, и я подозреваю, что это не на самом деле возможно. Кто-либо может подтвердить или отклонить это?

Спасибо.

7
задан Jonathan 20 May 2010 в 14:24
поделиться

4 ответа

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

8
ответ дан 6 December 2019 в 21:11
поделиться

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

3
ответ дан 6 December 2019 в 21:11
поделиться

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

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

public int DoSomething(int value)
{
    return do_something_in_c(value);
}
1
ответ дан 6 December 2019 в 21:11
поделиться

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

0
ответ дан 6 December 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: