【问题标题】:How to embed a native window handler (HWND) into a C# WPF app如何将本机窗口处理程序 (HWND) 嵌入 C# WPF 应用程序
【发布时间】:2018-07-20 17:07:36
【问题描述】:

我正在开发一个使用 pjsip 进行视频通话的应用程序。

我有:

  1. 核心库:C++ 中使用 pjsua2 的静态库。
  2. 一个用于 C++/CLI 桥的动态库,它封装了 1 中的所有公共接口。
  3. 一个 WPF 应用程序,链接到 2。

WPF 应用可以打开捕获设备。 Pjsip 为视频预览创建一个 sdl 窗口,并在 C++ 端将其 HWND 作为 void* 返回。

我正在将它“转换”为 std::string——使用 std::stringstream 流操作符——并将其编组到 WPF 端。

我想将该窗口嵌入到我的 WPF 主窗口中。这可能吗?

【问题讨论】:

  • 是的,但为什么是字符串?!
  • "...我将其“转换”为 std::string..." 什么!! HWNDvoid * 但它是指向无处的指针。它只是一种方便的类型来保存其含义是 MS-Windows 内部的值,它不代表内存地址。
  • 我正在使用 djinni 为其他语言搭建桥梁。我无法在生成的接口中发送指针……这就是我使用 std::string 的原因。在 mac/swift 上,我可以对一些可可类进行不安全的强制转换,并且工作正常。
  • 我现在也在尝试这样做,但我不确定如何继续。你还记得你的解决方案是什么吗?

标签: c# c++ wpf winapi pjsip


【解决方案1】:

您可以使用Hwnd​Host 类并在 WPF 中托管本机窗口。

Hwnd​HostSystem.Windows.Interop WPF 命名空间的一部分。

这是微软的例子,但有点乏味。

https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/walkthrough-hosting-a-win32-control-in-wpf

【讨论】:

    猜你喜欢
    • 2017-03-17
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多