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

Posted

技术标签:

【中文标题】是否可以在 C# 程序中使用 C++ .lib 文件?【英文标题】:Is it possible to use a C++ .lib file from within a C# program? 【发布时间】:2008-10-01 18:44:43 【问题描述】:

【问题讨论】:

【参考方案1】:

有很多方法。阅读 MSDN 中的“互操作”。

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

已经回答包装它,但这里有一个 example 。祝你好运!

【讨论】:

【参考方案5】:

我会看看swig,我们使用它对我们的项目有很好的效果,以便将我们的 C++ API 暴露给其他语言平台。

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

如果你有一个lib文件,应该可以先把它编译成DLL文件,然后在DLL接口中暴露你要调用的函数,第三,使用C#原生方法调用它们(看看pinvoke.net 关于如何做到这一点)。

【讨论】:

【参考方案8】:

你不能使用 lib,但就像其他人所说的,如果你将它包装到一个 dll 中,你就可以使用它。

swig 可以获取 .lib 的标头,如果它们不太复杂,它可以为您生成 dll,然后您可以使用 c# 中的 pinvoke 调用该 dll,这也将由 swig 生成。

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

【讨论】:

以上是关于是否可以在 C# 程序中使用 C++ .lib 文件?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 项目中使用 C++ API

是否可以从 C# 应用程序连接到 32 位 C++ RPC 服务器应用程序

在 C# 中调用 C++ 库 [关闭]

可以在 C# 中打开的最大文件数是不是有限制?

如何在 C# 应用程序中使用 C++ 库?

本机 C++ 程序在使用 C++/CLI 和 C# 互操作 DLL 启动时崩溃