我正在使用C ++ / CLI Wrapper从C#框架( - >托管)访问纯C ++库( - > unmanaged)。我想构建一种机制,使C ++库能够将有关其状态的信息推送到框架。根据我的理解,这意味着我必须在某些时候至少从非托管代码调用托管函数。这是可能的,我怎样才能做到这一点?
非常感谢你的帮助!
祝你好运, 雅各布
答案 0 :(得分:7)
使用委托让非托管代码调用托管方法。 Marshal :: GetFunctionPointerForDelegate()创建一个负责转换的存根,支持调用实例方法。您可以将返回的指针强制转换为非托管代码可用的函数指针。
您可以在this answer中找到完整的代码示例。
答案 1 :(得分:2)
我建议使用(托管)事件。您可以让C ++包装器在C ++ / CLI生成的类上调用一个方法来引发事件。
可以从C#端轻松订阅该事件,并像任何其他基于C#的事件一样使用。