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

发布于 2024-10-20 20:10:48 字数 183 浏览 4 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半窗疏影 2024-10-27 20:10:48

使用委托让非托管代码调用托管方法。 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.

输什么也不输骨气 2024-10-27 20:10:48

我建议为此使用(托管)事件。您可以让 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文