2011-09-27 47 views
2

我有一个C++作为后端,C#作为前端,我使用pinvoke互操作机制在本机代码和托管代码之间进行通信。在返回C#后保留C++类的状态

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

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

我可以修改C ​​++和C#代码,因为我拥有它们。

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

回答

3

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

  • 有相当一些它在网络上的信息:herehere(只是谷歌 “C++/CLI包装”)。
  • 而且,自然,在计算器上:here

除非有一些漂亮的工具,你将不得不自己写这个包装。或者,你可以在你的C++类中编写一个包装函数(或其集合),可能只会将所需的最小功能作为“C”函数公开。然后你会从init函数中拿出一个“HANDLE”(Int32,IntPtr,其他),并要求它作为计算函数的输入。你将不得不在内部管理这些包装函数(你可能还想提供一个清理函数)。