c# - 返回 C# 后保留 C++ 中的类状态

标签 c# c++ interop

我有一个 C++ 作为后端,C# 作为前端,我使用 pinvoke 互操作机制在 native 代码和托管代码之间进行通信。

现在的问题是,C++ 后端实际上完成了两个计算部分:初始化部分和动态计算部分。初始化只需要做一次,但需要很长时间,而即时计算部分只需很短的时间,但需要一遍又一遍地完成。

C++ 代码保持原样,不能重写为 C# 代码。

我可以修改 C++ 和 C# 代码,因为我可以随意使用它们。

我知道如何进行静态互操作,但我不知道如何进行这种全状态互操作。有什么想法吗?

最佳答案

您可以在 C++/CLI 中编写 C++ 类的包装器,从而提供真正的 CLR 类型。您可以在 C# 中无缝管理它们的生命周期。

  • 网上有很多相关信息:here或者 here (只需谷歌“C++/CLI 包装器”)。
  • 当然,在 stackoverflow 上:here .

除非有一些漂亮的工具,否则您必须自己编写这个包装器。

或者,您可以围绕 C++ 类编写一个包装函数(或一组函数),可能仅将所需的最低功能公开为“C”函数。然后,您将从 init 函数中传递出一个“HANDLE”(Int32、IntPtr 等),并要求它作为计算函数的输入。您必须在包装函数内部管理这些内容(您可能还想提供清理函数)。

关于c# - 返回 C# 后保留 C++ 中的类状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7567556/

相关文章:

c# - 对 ObservableCollection 中更改的对象使用react

C# - 即使 CommandTimeout 设置为在设定时间后终止查询,查询仍在 SQL Server 数据库中运行

c++ - "invalid use of incomplete type"。解决循环依赖

c++ - 我只是安装了Visual Studio,并特别遇到了一些错误WindowsSDKDir属性未定义。可能找不到某些构建工具

java - 如何在 Clojure 中处理特定情况的 Java 可变长度参数?

c# - Excel 互操作 "FindAll"方法

wpf - 在 XAML WPF 中插入 Winforms 表单

c# - 如何在 Visual Studio 中指定调试器可视化工具的顺序

c# - 如何强制重新显示 UpDown 框?

c++ - 如何使用简单的 C++ 程序测试 CPU