如何将数据从非托管代码推送到托管代码?

时间:2011-03-06 21:10:58

标签: c++-cli unmanaged managed

我正在使用C ++ / CLI Wrapper从C#框架( - >托管)访问纯C ++库( - > unmanaged)。我想构建一种机制,使C ++库能够将有关其状态的信息推送到框架。根据我的理解,这意味着我必须在某些时候至少从非托管代码调用托管函数。这是可能的,我怎样才能做到这一点?

非常感谢你的帮助!

祝你好运, 雅各布

2 个答案:

答案 0 :(得分:7)

使用委托让非托管代码调用托管方法。 Marshal :: GetFunctionPointerForDelegate()创建一个负责转换的存根,支持调用实例方法。您可以将返回的指针强制转换为非托管代码可用的函数指针。

您可以在this answer中找到完整的代码示例。

答案 1 :(得分:2)

我建议使用(托管)事件。您可以让C ++包装器在C ++ / CLI生成的类上调用一个方法来引发事件。

可以从C#端轻松订阅该事件,并像任何其他基于C#的事件一样使用。