使用MFC进行跨进程GDI绘图

3
我有一个庞大的MFC MDI应用程序,它使用设备上下文在可滚动的视图区域进行绘制。该应用程序使用第三方库在同一视图区域中进行一些附加绘制。它通过将视图区域的DC(设备上下文)传递给此第三方库(dll),然后DLL进行相当复杂的额外绘制来工作。
然而,我们正在将整个应用程序转换为64位,问题在于我们没有这个第三方库的64位版本。这只留给我们一个选择,那就是将这个第三方库移到一个单独的进程中,然后在我们的主应用程序和承载此第三方库的新进程之间进行跨进程调用。
但现在,我们如何进行跨进程绘制?是否有任何使用普通GDI或MFC进行此操作的方法?

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

1

这个答案说你不能仅仅将HDC从一个进程传递到另一个进程。

相反,您可能可以执行以下操作:

  1. 在您的DC上发布GetDIBits以获取原始位图位。
  2. 使用某种形式的IPC将其移动到32位进程中。
  3. 使用SetDIBits将它们放入其他进程中的内存DC中。
  4. 允许第三方库操纵该DC。
  5. 反向执行相同的操作以获取位。

对于IPC,我建议只需将一块共享内存映射到两个进程中即可。性能可能会非常差,但您应该能够应付。

我相信Google Chrome会执行类似的操作,以隔离渲染引擎和单个选项卡。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接