如何将数据从非托管代码推送到托管代码?
我正在使用 C++/CLI 包装器从 C# 框架(-> 托管)访问纯 C++ 库(-> 非托管)。我想构建一种机制,使 C++ 库能够将有关其状态的信息推送到框架。根据我的理解,这意味着我必须在某个时刻从非托管代码中至少调用一个托管函数。这可能吗?我怎样才能实现这一目标?
非常感谢您的帮助!
此致, 雅各布
I am using a C++/CLI Wrapper to access a purely C++ library (-> unmanaged) from a C# framework (-> managed). I want to build in a mechanism which enables the C++ library to push information about its status towards the framework. In my understanding this means that I will have to call at least a managed function from unmanaged code at some point. Is this possible and how can I achieve this?
Many thanks for your help!
Best regards,
Jakob
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用委托让非托管代码调用托管方法。 Marshal::GetFunctionPointerForDelegate() 创建一个负责转换的存根,支持调用实例方法。您可以将返回的指针强制转换为非托管代码可以使用的函数指针。
您可以在此答案中找到完整的代码示例< /a>.
Use a delegate to let unmanaged code call a managed method. Marshal::GetFunctionPointerForDelegate() creates a stub that takes care of the transition, calling an instance method is supported. You can cast the returned pointer to a function pointer usable by the unmanaged code.
You'll find a full code sample in this answer.
我建议为此使用(托管)事件。您可以让 C++ 包装器调用 C++/CLI 生成的类上的方法来引发事件。
该事件可以轻松地从 C# 端订阅,并像任何其他基于 C# 的事件一样使用。
I would recommend using a (managed) event for this. You could have your C++ wrapper call a method on your C++/CLI generated class which raises the event.
The event can easily be subscribed to from the C# side, and used like any other C# based event.