如何处理混合模式项目中的打印?

Posted

技术标签:

【中文标题】如何处理混合模式项目中的打印?【英文标题】:How to deal with printing in a mixed-mode project? 【发布时间】:2013-10-09 08:42:50 【问题描述】:

我有一个混合模式项目 C#(WPF) -> C++/Cli -> 非托管 C++。

图形是用c++处理的。有些东西被绘制出来,然后通过 c++/cli 接口对象传输到 c#。在 c# 中,此接口以 xaml 形式显示并显示。

现在我需要将此图片发送到打印预览,然后再发送到打印机。

怎么可能做到呢?

我想过序列化,但找不到任何关于序列化 c++/cli 接口的信息。

有什么想法吗?谢谢!

编辑 好的,所以我必须进一步解释。

在我的 c# 项目中,我有一个 c++/cli 对象,通过它我可以与我在 c++ 中的图形进行通信,并且这个对象有很多方法,例如 f.ex:

object.DrawLine
object.DrawSmthElse
object.UpdateImage

等等。等等

所以,当我在 WPF 中显示一个 xaml 表单时,这个表单的填充是通过这个对象发生的,就像我调用所有这些方法来绘制我需要的所有东西一样。

现在的问题是:我需要将这个图形部分准确地发送到打印机(这是在 c++ 中完成的)。我应该以什么形式进行?例如,如何将此对象传递给 c# 中的 DocumentViewer?

我希望这足以让问题搁置。

【问题讨论】:

【参考方案1】:

尝试在托管代码和非托管代码之间发送位图的原始字节。

在托管端,您可以创建位图对象with a Stream。您还可以保存现有位图out to a stream。您可以使用 MemoryStream 轻松地在 C++/CLI 对象中的托管和非托管代码中读取和写入字节。

--

如果图像已经在托管端(我不知道是不是),那么您可以使用 PrintPreviewDialog 和 PrintDialog (example)

【讨论】:

感谢您的建议!可能我到最后都没有理解,但是我没有位图,而是一个复杂的接口对象,其中包含一些公共方法,我可以通过这些方法从 c# 与非托管代码进行通信。在这种情况下,要将它放到 MemoryStream 中,我将不得不再次处理序列化?还是我错了?

以上是关于如何处理混合模式项目中的打印?的主要内容,如果未能解决你的问题,请参考以下文章

c++ makefile - 你如何处理混合源文件后缀的规则(例如 .cpp 和 .cxx)

如何处理网站中应作为 https 保护的混合内容?

如何处理 ValueError:分类指标无法处理多标签指标和多类目标错误的混合

如何对混合型数据做聚类分析

如何处理不安全的 XMLHttpRequest 端点 [重复]

如何处理存储库模式中的异构数据源?