如何将C库编译成.NETDLL?
通过编译包含以下代码的cpp项目,我们可以将C库编译为.NETDLL(包含并打开对所有C libs函数的访问)吗如何将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
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库。我会尽快尝试的。非常感谢你!在博客文章或类似的东西中,有没有一些循序渐进的成功故事?