是否可以在 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章