如何处理混合模式项目中的打印?
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)
如何处理 ValueError:分类指标无法处理多标签指标和多类目标错误的混合