首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Runtime.InteropServices.ComTypes.IStream到System.IO.Stream

System.Runtime.InteropServices.ComTypes.IStream到System.IO.Stream
EN

Stack Overflow用户
提问于 2008-12-22 06:47:49
回答 2查看 5.4K关注 0票数 2

在Invoke 3.0项目中,我需要通过P/Invoke进行一些调用(特别是像PTConvertPrintTicketToDevMode()这样的PrintTicket提供者函数)。

该框架具有COM IStream接口的托管定义:System.Runtime.InteropServices.ComTypes.IStream

我需要它作为System.IO.Stream,这样我就可以轻松地将.NET类(如XmlDocument)与这些导入函数的输出一起使用。但是,除了一次读写一块字节的数据之外,我找不到一种不那么痛苦的方法来将它来回转换为System.IO.Stream。对于一个看起来很常见的任务来说,这似乎太笨拙了。

还是说我做错了?

我将PTConvertPrintTicketToDevMode导入为:

代码语言:javascript
复制
    [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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 3
EN

Stack Overflow用户

发布于 2009-04-10 00:05:54

您不需要使用PInvoke,.Net中的PrintTicketConverter类型已经为您完成了此操作

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/385684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档