2010-05-20 16 views
7

Sé que es posible compilar mi código C en un dll, y luego usar P/Invoke para llamar a ese código.¿Es posible incrustar el código C en un proyecto de C#?

Lo que me preguntaba si era posible tener un trozo de código C incrustado directamente en mi código, tal vez sólo está disponible para una clase ...

Algo así como este ejemplo (no de trabajo):

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

He estado intentando durante unas horas usando Visual Studio 2008, pero no estoy llegando a ninguna parte, y sospecho que en realidad no es posible. ¿Alguien puede confirmar o negar esto?

Gracias.

Respuesta

9

Es posible crear un ensamblaje de modo mixto (es decir, uno que tenga código administrado y nativo), pero solo el C++/El compilador CLI puede producir uno de estos. Lo que estás buscando hacer no es compatible con el compilador de C#.

3

No es posible. Mientras que C# admite unsafe code (punteros), no es compatible con C o C++

0

En mi humilde opinión, no es posible, ya que C es un lenguaje inseguro y no administrado. Además, C# tiene todas las características importantes de C excepto los punteros.

+1

C# hace punteros de apoyo - http://msdn.microsoft.com/ es-us/library/aa664769 (v = VS.71) .aspx –

+0

Mi mal ... Pero no lo consideré porque no es seguro. – Salil

2

Puede escribir y compilar el código C como un conjunto normal (non-.NET), entonces P/invocarlo:

[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

El OP menciona esto en la primera línea de la pregunta. –

+0

Sí. Hice esto originalmente. Pero parecía de alguna manera poco elegante. :) – Jonathan

Cuestiones relacionadas