【问题标题】:Cross process GDI Drawing using MFC使用 MFC 进行跨进程 GDI 绘图
【发布时间】:2013-05-23 19:36:59
【问题描述】:

我有一个巨大的 MFC MDI 应用程序,它使用设备上下文在其可滚动视图区域上绘制。此应用程序使用第 3 方库在同一视图区域中进行一些额外的绘图。它通过将视图区域的 DC(设备上下文)传递给这个第 3 方库 (dll) 来工作,然后 DLL 会执行非常复杂的附加绘图。

但是,我们正在将整个应用程序转换为 64 位,问题是我们没有这个 3rd 方库的 64 位版本。这让我们只有一个选择,那就是将这个第 3 方库移动到一个单独的进程,然后在我们的主应用程序和托管这个第 3 方库的这个新进程之间进行进程外调用。

但是现在,我们如何进行跨进程绘图呢?有没有办法使用普通的 GDI 或 MFC 来做这些事情?

【问题讨论】:

  • 看看使用dllhost作为代理通过COM访问32位DLL。我自己实际上并没有这样做,否则我会回答。我知道其他人使用过这种方法,他们对结果很满意。

标签: c++ mfc gdi


【解决方案1】:

这个answer 表示您不能只将HDC 从一个进程传递到另一个进程。

你可以做的是:

  1. 在您的 DC 上发出 GetDIBits 以获取原始位图位。
  2. 使用某种形式的 IPC 将这些移动到 32 位进程。
  3. 使用SetDIBits 将它们放入另一个进程中的内存DC。
  4. 允许您的第 3 方库与该 DC 一起玩。
  5. 反向执行相同操作以恢复位。

对于 IPC,我建议简单地将一块共享内存映射到两个进程中。性能可能会很差,但你应该可以摆脱它。

我相信谷歌浏览器会做类似的事情来将渲染引擎与各个选项卡隔离开来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多