在Invoke 3.0项目中,我需要通过P/Invoke进行一些调用(特别是像PTConvertPrintTicketToDevMode()这样的PrintTicket提供者函数)。
该框架具有COM IStream接口的托管定义:System.Runtime.InteropServices.ComTypes.IStream
我需要它作为System.IO.Stream,这样我就可以轻松地将.NET类(如XmlDocument)与这些导入函数的输出一起使用。但是,除了一次读写一块字节的数据之外,我找不到一种不那么痛苦的方法来将它来回转换为System.IO.Stream。对于一个看起来很常见的任务来说,这似乎太笨拙了。
还是说我做错了?
我将PTConvertPrintTicketToDevMode导入为:
[DllImport("prntvpt.dll")]
public static extern int
PTConvertPrintTicketToDevMode(IntPtr hProvider,
IStream pPrintTicket,
EDefaultDevmodeType baseDevmodeType,
EPrintTicketScope scope,
IntPtr pcbDevmode,
out IntPtr ppDevmode,
[MarshalAs(UnmanagedType.BStr)]out String pbstrErrorMessage);发布于 2008-12-22 07:22:54
这并不是真正直接的(即。在框架中没有内置的方法),但其思想是实现一个实现System.Runtime.InteropServices.ComTypes.IStream.的类这是一篇包含代码的文章。本文没有实现Write方法,但是应该再花10分钟来编写该方法。看看这个。http://www.sturmnet.org/blog/archives/2005/03/03/cds-csharp-extractor
发布于 2009-04-10 00:05:54
您不需要使用PInvoke,.Net中的PrintTicketConverter类型已经为您完成了此操作
https://stackoverflow.com/questions/385684
复制相似问题