Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有可能在C#项目中嵌入C代码吗?_C#_C_Visual Studio 2008_Embed - Fatal编程技术网

有可能在C#项目中嵌入C代码吗?

有可能在C#项目中嵌入C代码吗?,c#,c,visual-studio-2008,embed,C#,C,Visual Studio 2008,Embed,我知道可以将我的C代码编译成dll,然后使用p/Invoke调用该代码 我想知道的是,是否有可能将一段C代码直接嵌入到我的代码中,可能只对一个类可用 类似以下(非工作)示例: 我已经尝试了几个小时使用VisualStudio2008,但我没有取得任何进展,我怀疑这实际上是不可能的。有人能证实或否认这一点吗 谢谢。这是不可能的。虽然C#支持(指针),但它与C或C++不向后兼容。可以创建混合模式程序集(即既有托管代码又有本机代码的程序集),但只有C++/CLI编译器才能生成其中一个。C编译器不支持您

我知道可以将我的C代码编译成dll,然后使用p/Invoke调用该代码

我想知道的是,是否有可能将一段C代码直接嵌入到我的代码中,可能只对一个类可用

类似以下(非工作)示例:

我已经尝试了几个小时使用VisualStudio2008,但我没有取得任何进展,我怀疑这实际上是不可能的。有人能证实或否认这一点吗


谢谢。

这是不可能的。虽然C#支持(指针),但它与C或C++不向后兼容。

可以创建混合模式程序集(即既有托管代码又有本机代码的程序集),但只有C++/CLI编译器才能生成其中一个。C编译器不支持您要执行的操作。

嗯,这是不可能的,因为C是一种不安全的非托管语言。此外,C#除了指针之外,还具有C的所有重要功能。

您可以将C代码作为普通(非.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);
}

C#支持指针-我的错。。但我没有考虑过,因为这是不安全的。OP在提问的第一行提到了这个。是的。我本来是这样做的。但它似乎有点不雅
[DllImport ("mylib.dll")]
private static extern int do_something_in_c(int i);

public int DoSomething(int value)
{
    return do_something_in_c(value);
}