【问题标题】:Is it possible to embed C code in a C# project?是否可以在 C# 项目中嵌入 C 代码?
【发布时间】:2011-02-21 21:48:03
【问题描述】:

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

我想知道是否有可能在我的代码中直接嵌入一大段 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 尝试了几个小时,但我没有得到任何结果,我怀疑这实际上是不可能的。任何人都可以确认或否认这一点吗?

谢谢。

【问题讨论】:

    标签: c# c visual-studio-2008 embed


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        恕我直言,这是不可能的,因为 C 是一种不安全且不受管理的语言。此外,C# 具有 C 的所有重要特性,但指针除外。

        【讨论】:

        【解决方案4】:

        您可以将 C 代码编写和编译为普通(非 .NET)程序集,然后 P/Invoke 它:

        [DllImport ("mylib.dll")]
        private static extern int do_something_in_c(int i);
        
        public int DoSomething(int value)
        {
            return do_something_in_c(value);
        }
        

        【讨论】:

        • OP 在问题的第一行中提到了这一点。
        • 是的。我最初是这样做的。但这似乎有点不雅。 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-24
        相关资源
        最近更新 更多