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

时间:2008-10-01 18:44:43

标签: c# c++

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

8 个答案:

答案 0 :(得分:8)

有很多方法。在MSDN中阅读“interop”..

一种方法是将lib公开为DLL,然后使用pinvoke从C#项目中调用这些函数。但是,这限制了你对C风格的界面。

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

另一种方法是使用COM接口包装lib。但COM很痛苦,所以我不会......

答案 1 :(得分:6)

不直接。您可以创建一个C ++ / CLI程序集,它使用lib然后从C#访问它,或者您可以将lib包装为DLL。

答案 2 :(得分:3)

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

如果您正在寻找任何C ++ / CLI书籍,我会推荐Nishant Sivakumar的C++/CLI in Action

答案 3 :(得分:2)

已经回答要包装但是这里是example。祝你好运!

答案 4 :(得分:2)

我会看一下swig,我们使用它可以很好地影响我们的项目,将我们的C ++ API暴露给其他语言平台。

这是一个维护良好的项目,可以有效地构建一个围绕C ++库的瘦包装器,允许C#等语言直接与您的本机代码进行通信 - 省去了必须实现(和调试)粘合代码的麻烦。 p>

答案 5 :(得分:1)

没有。您只能使用C#程序中的完整.dll。

答案 6 :(得分:0)

这取决于你对这种情况有任何限制吗?

如果你有一个lib文件,应该可以先将它编译成一个DLL文件,然后在DLL接口中公开你要调用的函数,然后用C#本机方法调用它们(看看pinvoke.net如何做到这一点)。

答案 7 :(得分:0)

你不能使用lib,但是和其他人说的一样,你可以使用它,如果你把它包装成一个DLL。

swig可以获取.lib的标题,如果它们不是太复杂,它可以为你生成dll,然后你可以使用c#的pinvoke来调用它,这也是swig生成的。

如果您的图书馆很复杂并且在任何地方都有引用计数智能指针,那么您应该找到另一种选择。