是否可以在C#程序中使用C ++ .lib文件?

时间:2020-03-06 14:59:30  来源:igfitidea点击:

是否可以从C程序中使用C ++ .lib文件?

解决方案

不可以。我们只能从Cprogram使用完整的.dll。

不直接。我们可以创建一个使用该库的C ++ / CLI程序集,然后从C#中访问该程序集,也可以将该库包装为DLL。

有很多方法。在MSDN中阅读有关"互操作"的信息。

一种方法是将lib公开为DLL,然后使用pinvoke从Cproject调用这些函数。但是,这将我们限制为C风格的界面。

如果界面更复杂(例如面向对象),则可以创建一个C ++ / CLI层,该层将lib的类结构暴露给C程序。这意味着我们必须创建一个托管的C ++(或者现在称为C ++ / CLI)项目;然后在托管代码中设计一个接口,该接口将通过调用本地C ++(即lib)来实现。

完成此操作的另一种方法是将lib与COM接口包装在一起。但是COM很痛苦,所以我不会...

已经回答将其包装好了,但这是一个示例。祝你好运!

我们需要的是围绕使用的本机C / C ++库的托管包装器(C ++ / CLI)。

如果我们正在寻找任何C ++ / CLI书籍,我建议Nishant Sivakumar的C ++ / CLI实际应用

那取决于我们在这种情况下是否有任何限制?

如果我们有一个lib文件,则应该可以首先将其编译为DLL文件,其次在DLL接口中公开要调用的函数,然后使用Cnative方法对其进行调用(请参见上的pinvoke.net如何做到这一点)。

我来看看swig,我们用它对我们的项目产生了很好的效果,将我们的C ++ API暴露给其他语言平台。

这是一个维护良好的项目,可以在C ++库周围有效地构建一个瘦包装器,该包装器可以使诸如C之类的语言直接与本机代码通信,从而省去了实现(和调试)粘合代码的麻烦。

我们不能使用lib,但是就像其他人所说的那样,如果将它包装到dll中就可以使用它。

swig可以使用.lib标头,如果它们不太复杂,它可以为我们生成dll,然后我们可以通过cv中的pinvoke调用该dll,sdll也将由swig生成。

如果库很复杂,并且到处都有引用计数的智能指针,那么我们应该找到一个替代方法。