Я знаю, что возможно скомпилировать мой код 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, но я не добираюсь нигде, и я подозреваю, что это не на самом деле возможно. Кто-либо может подтвердить или отклонить это?
Спасибо.
Можно создать сборку смешанного режима (то есть сборку, содержащую как управляемый, так и родной код), но только компилятор C++/CLI может создать такую сборку. То, что вы хотите сделать, не поддерживается компилятором C#.
Это невозможно. Хотя C # поддерживает небезопасный код (указатели), он не имеет обратной совместимости с C или C ++
Вы можете написать и скомпилировать ваш код на 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);
}
ИМХО, это невозможно, поскольку C - небезопасный и неуправляемый язык. Кроме того, C # имеет все важные функции C, кроме указателей.