DEVMODE
標準およびデバイス固有の設定を渡すために、現在の印刷タスクのプリンターを変更する必要があります。私は次のことを行います:
PrintDocument d = new PrintDocument();
d.PrinterSettings.PrinterName = "Microsoft XPS Document Writer"; // example printer name
byte[] devmode_data; // contains a valid value that is obtained from registry
IntPtr devmode = IntPtr.Zero;
GCHandle handle = GCHandle.Alloc(devmode_data, GCHandleType.Pinned);
try
{
devmode = handle.AddrOfPinnedObject();
if (devmode != IntPtr.Zero) d.PrinterSettings.SetHdevmode(devmode);
}
finally
{
if (handle.IsAllocated) handle.Free();
}
意味のあるエラー情報なしで実行しようとPrinterSettings.SetHdevmode
すると失敗します。null でない場合、メソッド内で例外がスローされます。
だから私の質問は:何が間違っているのですか?キャストするのは間違っていますか?たぶん、配列以外のものを期待していますか?NullReferenceException
d.PrinterSettings
PrinterSettings.SetHdevmode
byte[]
IntPtr
SetHdevmode
byte[]
byte[] devmode_data
レジストリから配列を取得します。これは有効な値であり、現在のプリンター設定で使用されている値と同じです。