2010-05-20 1 views
7

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

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

Спасибо.

ответ

9

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

3

Невозможно. В то время как C# поддерживает unsafe code (указатели), он не обратно совместим с C или C++

0

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

+1

C# делает указатели поддержки - http://msdn.microsoft.com/ en-us/library/aa664769 (v = VS.71) .aspx –

+0

Мой плохой ... Но я не считал это, так как это небезопасно. – Salil

2

Вы можете написать и скомпилировать код C как обычный (non-.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

ОП упоминает это в первой строке вопроса. –

+0

Да. Я сделал это изначально. Но это казалось каким-то непонятным. :) – Jonathan