在返回c#后保持类的状态在c++中
Keep the class state in C++ after Returning to C#
我使用c++作为后端,c#作为前端,我使用pinvoke互操作机制在本机代码和托管代码之间进行通信。
现在的问题是c++后端实际上有两部分计算,初始化部分和动态计算部分。初始化只需要做一次,但需要很长时间,而动态计算部分只需要很短的时间,但需要一遍又一遍地做。
c++代码要保持原样,不能重写成c#代码。
我可以随意修改c++和c#代码。
我知道如何做静态互操作,但我不知道如何做这种状态全互操作。任何想法?
您可以在c++/CLI中为c++类编写一个包装器,从而提供真正的CLR类型。你可以在c#中无缝地管理它们的生命周期。
- 在网上有很多关于它的信息:这里或在这里(只需谷歌"c++/CLI包装器")。
- 当然,在stackoverflow:这里。
除非有一些漂亮的工具,否则您将不得不自己编写这个包装器。
或者,您可以在c++类周围编写一个包装器函数(或其集合),可能只将所需的最小功能暴露为"C"函数。然后,您将从init-function中传递出一个"HANDLE"(Int32, IntPtr,等等),并要求它作为compute-function的输入。您必须在包装器函数内部管理这些内容(您可能还希望提供清理函数)。
相关文章:
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 试图在崇高中奔跑. 错误 已发生: 收集2.exe: 错误: ld 返回 1 退出状态
- 在容器上移动分配:以前包含的对象的状态
- collect2:错误:ld 返回 1 个退出状态未定义的引用
- 具有动态大小的特征矩阵的默认初始状态
- 如何从Clojure调用C++程序,以使程序保持打开状态?
- q网络回复 无状态码或错误,但失败