在 .NET 3.0 项目中,我需要通过 P/Invoke 进行一些调用(特别是对像 PTConvertPrintTicketToDevMode() 这样的 PrintTicket Provider 函数)。
该框架具有 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);