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

本文关键字:C++ lib 文件 程序 是否 | 更新日期: 2023-09-27 17:47:23

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

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

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

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

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

执行此操作的另一种方法是使用 COM 接口包装您的库。但是COM很痛苦,所以我不会...

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

您需要

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

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

已经回答要包装它,但这里有一个例子. 祝你好运!

我会看看 swig,我们在项目中使用它来向其他语言平台公开我们的 C++ API。

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

No. 只能使用 C# 程序中的完整.dll。

这取决于,你对这种情况有什么限制吗?

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

你不能

使用库,但就像其他人说的那样,如果你把它包装成一个DLL,你可以使用它。

swig 可以获取 .lib 的标头,如果它们不是太复杂,它可以为你生成 DLL,然后你可以使用 C# 的 pinvoke 调用它,这也将由 swig 生成。

如果您的库很复杂,并且到处都有引用计数的智能指针,您应该找到替代方案。