我有一个C#VS10项目。我希望它的部分是纯粹的C.所以我将拥有纯C库和一个C#文件,它将与C代码一起调用纯粹的Lib。
所以我将拥有C部分代码 - 不是预编译的DLL,而是C代码和C#代码文件。那么有可能在一个C#文件中包含C代码,就像我们在C ++代码中有C代码一样吗?
像C#中的内联C代码......
(我知道这听起来很奇怪,但我确实需要它)
有可能吗?我是否有姿势将C部分的数据传递给C#?
答案 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)。