3

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

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

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

4

1 回答 1

1

这个答案说你不能只将HDC一个进程传递给另一个进程。

您可能可以做的是:

  1. 在您的 DC 上发布GetDIBits以获取原始位图位。
  2. 使用某种形式的 IPC 将这些移至 32 位进程。
  3. 用于SetDIBits将它们放在另一个进程中的内存 DC 中。
  4. 允许您的第 3 方库与该 DC 一起玩。
  5. 反过来做同样的事情来取回位。

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

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

于 2013-06-23T20:26:07.930 回答