如何将C库编译成.NETDLL?

如何将C库编译成.NETDLL?,.net,c++,c,visual-studio,clr,.net,C++,C,Visual Studio,Clr,通过编译包含以下代码的cpp项目,我们可以将C库编译为.NETDLL(包含并打开对所有C libs函数的访问)吗 extern "C" { #include <library.h> } extern“C”{ #包括 } 使用/clr:pure参数和VS?(VS10) 或者我们应该做一些更复杂的事情?这实际上取决于您的C代码 p/Invoke通常是最容易开始的,IMO对于一些函数来说是非常可行的。性能不一定很好,我也不会用它来构建一个完整的程序——但要重用某些函数,这是值得的 从C

通过编译包含以下代码的cpp项目,我们可以将C库编译为.NETDLL(包含并打开对所有C libs函数的访问)吗

extern "C" {
#include <library.h>
}
extern“C”{
#包括
}
使用
/clr:pure
参数和VS?(VS10)


或者我们应该做一些更复杂的事情?

这实际上取决于您的C代码

p/Invoke通常是最容易开始的,IMO对于一些函数来说是非常可行的。性能不一定很好,我也不会用它来构建一个完整的程序——但要重用某些函数,这是值得的

从C到/clr:pure需要您:


  • <>你的代码的当前状态(和它的库)将决定进程是多么痛苦。

    < p>我发现最好用旧的管理C++来做这个。
    CLR:PURE
    就是不想剪

    例如:

    extern "C" int _foo(int bar)
    {
      return bar;
    }
    
    namespace Bar
    {
      public __gc class Foo
      {
      public:
        Foo() {}
    
        static int foo(int bar)
        {
          return _foo(bar);
        }
      };
    };
    
    编译时使用:
    /clr:oldSyntax


    现在可以引用AsbBead,调用.<代码> bar。fo.Fo.[/]代码> .NET.< /P> > P>。一般情况下,你甚至可以编译C代码作为C++而不做一些修改。如果你能把C代码编译成C++,那么你可以尝试把它编译成C++ +CLI(CLR:纯选项是这样做的)。 此时,您可以创建某种类,将所有导出的函数公开为公共(托管)类的静态方法

    这些东西的味道可以用C++预处理器技巧(宏等)来完成,有时你会手工编写包装器。


    这样,您可以使用/CLR:XXX选项编译C++到.NET程序集的基本信息是正确的,但这并不意味着它是唯一需要做的事情来获得有用的.NET程序集。

    < P>这可能对您有兴趣:

    创建C编译器occil.exe

    从c代码(例如stack.c)创建.NET dll

    步骤1:将stack.c构建为IL代码

    occil /ostackdll.il /c /Wd /9 /NStackLib.Stack stack.c
    
    步骤2:生成生成的IL代码到.NET DLL

    ilasm /DLL stackdll.il
    

    然后,您可以在c#程序中引用stack.dll并调用stack.c

    中的c函数,也就是说您不需要p/Invoke来使用.Net dll。“Tayy”说,你可以用C++的“CPP文件”代码编译成.NETDLL,使用“vc+纯”参数,vs. @ OLE“它们”是正确的。在他关于这方面的其他(我记不清了,可能有五个)问题中,Ole提出了一个要求,要求所有内容都编译成一个文件
    DllImport
    不会让你达到目的。你的意思是什么?请提供简单的示例?你能解释一下“\uu gc”是什么,这段代码将如何编译成.net dll(我的意思是我们将在其中获得什么以及如何实现?@Ole Jak:
    \u gc
    只是表明这是一个托管类,是旧式语法的一部分。你可以在反射器里看到。将在模块的命名空间中被称为“代码> Foo< /Cuth.OL”:OLE JAK:我添加了一个命名空间并使之公开,因此它可以被更容易地测试。我喜欢你的答案——这是一个快速、简单的方法,通过使用VisualStudio工具通过C++代码从.c代码创建.Net库。我会尽快尝试的。非常感谢你!在博客文章或类似的东西中,有没有一些循序渐进的成功故事?