在返回c#后保持类的状态在c++中

本文关键字:状态 c++ 返回 | 更新日期: 2023-09-27 18:09:41

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

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

c++代码要保持原样,不能重写成c#代码。

我可以随意修改c++和c#代码。

我知道如何做静态互操作,但我不知道如何做这种状态全互操作。任何想法?

在返回c#后保持类的状态在c++中

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

  • 在网上有很多关于它的信息:这里或在这里(只需谷歌"c++/CLI包装器")。
  • 当然,在stackoverflow:这里。

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

或者,您可以在c++类周围编写一个包装器函数(或其集合),可能只将所需的最小功能暴露为"C"函数。然后,您将从init-function中传递出一个"HANDLE"(Int32, IntPtr,等等),并要求它作为compute-function的输入。您必须在包装器函数内部管理这些内容(您可能还希望提供清理函数)。