我需要更改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
使用 aNullReferenceException
并且没有任何有意义的错误信息执行时,它会失败。d.PrinterSettings
不为 null,则在方法内部引发异常PrinterSettings.SetHdevmode
。
所以我的问题是:出了什么问题?是投错了吗byte[]
?IntPtr
也许期望数组SetHdevmode
以外的东西?byte[]
我byte[] devmode_data
从注册表中获取数组。这是一个有效值,并且与当前打印机设置中使用的值相同。