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

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

【问题讨论】:

    标签: c# c++


    【解决方案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 生成。

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2021-08-26
                    • 2013-12-17
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-05-03
                    • 1970-01-01
                    相关资源
                    最近更新 更多