.NET 3.0 プロジェクトでは、P/Invoke を介して (特に PTConvertPrintTicketToDevMode() などの PrintTicket プロバイダー関数に対して) いくつかの呼び出しを行う必要があります。
フレームワークには、COM IStream インターフェイスのマネージ定義 System.Runtime.InteropServices.ComTypes.IStreamがあります。
これらのインポートされた関数の出力で .NET クラス (XmlDocument など) を簡単に使用できるように、これを System.IO.Stream として必要とします。しかし、一度にバイトのブロック単位でデータを読み書きする以外に、これを前後に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);