我有一个 C++ 作为后端,C# 作为前端,我使用 pinvoke 互操作机制在 native 代码和托管代码之间进行通信。
现在的问题是,C++ 后端实际上完成了两个计算部分:初始化部分和动态计算部分。初始化只需要做一次,但需要很长时间,而即时计算部分只需很短的时间,但需要一遍又一遍地完成。
C++ 代码保持原样,不能重写为 C# 代码。
我可以修改 C++ 和 C# 代码,因为我可以随意使用它们。
我知道如何进行静态互操作,但我不知道如何进行这种全状态互操作。有什么想法吗?
最佳答案
您可以在 C++/CLI 中编写 C++ 类的包装器,从而提供真正的 CLR 类型。您可以在 C# 中无缝管理它们的生命周期。
除非有一些漂亮的工具,否则您必须自己编写这个包装器。
或者,您可以围绕 C++ 类编写一个包装函数(或一组函数),可能仅将所需的最低功能公开为“C”函数。然后,您将从 init 函数中传递出一个“HANDLE”(Int32、IntPtr 等),并要求它作为计算函数的输入。您必须在包装函数内部管理这些内容(您可能还想提供清理函数)。
关于c# - 返回 C# 后保留 C++ 中的类状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7567556/