在C#项目的C部分:我们可以混合原始C和C#代码(VS10)

时间:2010-07-13 02:23:07

标签: c# .net c visual-studio

我有一个C#VS10项目。我希望它的部分是纯粹的C.所以我将拥有纯C库和一个C#文件,它将与C代码一起调用纯粹的Lib。

所以我将拥有C部分代码 - 不是预编译的DLL,而是C代码和C#代码文件。那么有可能在一个C#文件中包含C代码,就像我们在C ++代码中有C代码一样吗?

像C#中的内联C代码......

(我知道这听起来很奇怪,但我确实需要它)

有可能吗?我是否有姿势将C部分的数据传递给C#?

4 个答案:

答案 0 :(得分:3)

您可以使用P/Invoke从C#调用C方法。

但是,除非你有充分的理由,否则我高度建议坚持使用C#而不是使用C.


无法在同一文件中混合使用C和C#代码。

但是,您可以使用CreateRemoteThread代码和/或P / Invoke在原始C#中复制任何C代码(调用unsafe除外)。

答案 1 :(得分:1)

不,C#项目不能包含其他语言的源代码。

但是,您可以使用C ++ / CLI,它可以直接与C代码链接到单个.NET程序集中。最简单的方法是使用C ++ / CLI执行您计划用C#执行的任何操作 - 它可以访问C#所有的.NET库。但您也可以同时拥有包含C代码的C ++ / CLI项目和C#项目,并使用ILMerge将它们合并为一个DLL。

答案 2 :(得分:1)

gcc有一个CIL后端,还有一些其他尝试构建C到CIL编译器。这些将生成标准的.Net库,可以从C#调用,但它们将在不同的项目中。 (您需要将C项目编译到库中并引用它 - 尽管如果需要,您可以稍后将它们合并到单个程序集中。)不幸的是,可用于C到CIL开发的工具几乎严重缺乏,所以我有疑问是否值得,而不是仅仅用p / invoke包装它。您也将使用它来降低性能,这是使用p / invoke而不是编写托管代码的一半原因。

答案 3 :(得分:0)

您可以使用DllImport属性从C库中调用方法。这称为平台调用(或更常见的P / Invoke)。