2010-05-20 46 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

恕我直言,这是不可能的,因为C是一种不安全的非托管语言。另外,C#除了指针之外,还有C的所有重要特性。

+1

C#不支持指针 - http://msdn.microsoft.com/ en-us/library/aa664769(v = VS.71).aspx – 2010-05-20 14:37:39

+0

我的不好..但我没有考虑它,因为它是不安全的。 – Salil 2010-05-20 14:40:27

2

您可以编写和编译C代码为正常(non-.NET)组件,则P /调用它:

[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

OP在问题的第一行提到了这一点。 – 2010-05-20 14:37:59

+0

是的。我原本是这样做的。但它似乎有点不雅。 :) – Jonathan 2010-05-20 14:42:01

相关问题