C ++ / CLI或C#P /调用一个大的C库,调用一个extern函数
现在我知道有很多关于这个问题的问题,但总的来说,它们是指c ++库。
我有一个相当重要的C DLL(大约2800个函数),我需要为C#中约70个可调用的API制作一个API。 我开始使用P / Invoke,但它非常乏味,因为我有复杂的结构传递并从C代码返回(带有指向其他指针的结构,双指针等),并且我花了很多时间来获得所需的东西。
现在我完全不知道C ++ / CLI,但是我对C ++有一些经验(虽然不是很多)。
我想知道是否值得为我的项目学习这一点。 将使用C ++包装使我不必与编组结构斗争,分配全局堆中的指针,等等或不?
非常感谢这个伟大的社区
很难处理来自C#的本地结构。 所以编写一个C ++ / CLI包装更容易。 您可以将这些结构转换/包装为ref classes
而不会有太多麻烦,并可以在C#中使用它们。
void some_function(Some_Struct * ss)
{
//...
}
struct Some_Struct
{
int intVal;
double dblVal;
}
//C++/ClI
public ref class Wrapper
{
public:
void CallSomeFunction(int intval, double doubleval)
{
Some_Struct * ss = new Some_Struct(); // maybe malloc is more appropriate.
ss->intVal = intval;
ss->dblVal = doubleval;
some_function(ss);
delete ss; // or Free(ss);
}
}
//C#
Wrapper wrapper = new Wrapper();
wrapper.CallSomeFunction(10,23.3);
这是相当大的表面积。 我认为C ++ / CLI比P / invoke更容易。 您不需要使用任何C ++功能,您可以编写基本上为C的内容,并使用C ++ / CLI编译和导出它。
链接地址: http://www.djcxy.com/p/59851.html上一篇: C++/CLI or C# P/Invoke for a big C library, calling an extern function