使用MFC交叉过程GDI绘图

时间:2013-05-28 18:12:34

标签: c++ mfc gdi

我有一个巨大的MFC MDI应用程序,它使用设备上下文绘制其可滚动视图区域。此应用程序使用第三方库在同一视图区域中执行一些其他绘图。它的工作原理是将视图区域的DC(设备上下文)传递给第三方库(dll),然后DLL执行相当复杂的附加绘图。

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

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

1 个答案:

答案 0 :(得分:1)

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

您可以做的是:

  1. 在DC上发出GetDIBits以获取原始位图位。
  2. 使用某种形式的IPC将这些转移到32位进程。
  3. 使用SetDIBits将其放入另一个进程的内存DC中。
  4. 允许您的第三方图书馆使用该DC。
  5. 反过来做同样的事情。
  6. 对于IPC,我建议简单地将一大块共享内存映射到两个进程中。性能可能会非常差,但你应该能够逃脱它。

    我相信Google Chrome会做类似的工作,将渲染引擎与各个标签隔离开来。