gpt4 book ai didi

c# - 从 C# 调用 C++ 库

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:21 24 4
gpt4 key购买 nike

这个问题似乎与之前的问题重复。我已经阅读了一系列帖子,但对我的情况并不完全清楚。

我有一个使用 momentics IDE 创建的 C++ 库。我必须能够将此库用于 c# 项目。

有人在交给我之前一直在做这个项目。目前,有 2 层可以实现这一点。首先,一个 c++ 项目包括带有 c++ 包装器的完整库。该项目创建一个 dll 作为输出。然后将此 c++ dll 提供给 c# 项目,该项目具有对 c++ dll 的 dllimport 调用。这个 c# 项目再次创建一个 dll。最后,为了在 c# 应用程序中使用该库,我必须包含对这两个 dll 的引用。

这是让它工作的正确方法吗?我在想可能应该有一种方法来简化这个过程。

有人可以帮我解决这个问题吗?

最佳答案

鉴于您使用的是 C++ 库,我假设它利用类等 C++ 语义,而不仅仅是公开过程。如果是这种情况,那么这通常是通过手动创建的托管 C++ 互操作库来完成的。

基本上,您在 Visual Studio 中创建托管 C++ 库,引用现有 C++ 库,并围绕现有 C++ 类创建托管包装器。然后,您在 C# 项目中引用此(托管)C++ 程序集,并将原始(非托管)C++ 库作为放置在构建目录中的文件包含在 C# 程序集中。

这是必需的,因为无法通过 P/Invoke (DllImport) 调用来引用诸如 C++ 类之类的东西。

如果您的基础库只是一系列函数,那么您可以通过 P/Invoke 函数直接在 C# 项目中引用它。

无论哪种方式,都必须包括上面提到的所有库(对于第一个,非托管 C++ 库、托管 C++ 程序集和 C# 项目,或者对于第二个,非托管 C++ 库和 C# 项目)在任何引用它们的项目中。您不能将非托管库静态链接到托管程序集。

关于c# - 从 C# 调用 C++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2958416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com