В проекте .NET 3.0 мне нужно сделать несколько звонков через P / Invoke
(в частности, для функций поставщика PrintTicket, таких как PTConvertPrintTicketToDevMode ()).
Каркас имеет управляемое определение интерфейса 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);