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

相關問題