Сделал как в МСДН

, но, очевидно, все равно есть ошибка
X++:
#define.SizeOfStruct (206)
static Binary NewDEVMODE()
{
Binary DEVMODE = new Binary(#SizeOfStruct);
container con = WinAPI::getVersion();
;
DEVMODE.dWord (0, 198); // Specifies the size, in bytes, of the structure
DEVMODE.dWord ( 8 ); //dmDeviceName[CCHDEVICENAME];
DEVMODE.word ( 10 ); //dmSpecVersion
DEVMODE.word ( 12 ); //dmDriverVersion
DEVMODE.word ( 16 ); //dmSize
DEVMODE.word ( 20 ); //dmDriverExtra
DEVMODE.dWord ( 24 ); //dmFields
DEVMODE.word ( 26 ); //dmOrientation
DEVMODE.word ( 28 ); //dmPaperSize
DEVMODE.word ( 30 ); //dmPaperLength
DEVMODE.word ( 32 ); //dmPaperWidth
DEVMODE.word ( 34 ); //dmScale
DEVMODE.word ( 36 ); //dmCopies
DEVMODE.word ( 38 ); //dmDefaultSource
DEVMODE.word ( 40 ); //dmPrintQuality
DEVMODE.dWord ( 48 ); //dmPosition
DEVMODE.dWord ( 56 ); //dmDisplayOrientation
DEVMODE.dWord ( 64 ); //dmDisplayFixedOutput
DEVMODE.word ( 66 ); //dmColor
DEVMODE.word ( 68 ); //dmDuplex
DEVMODE.word ( 70 ); //dmYResolution
DEVMODE.word ( 72 ); //dmTTOption
DEVMODE.word ( 74 ); //dmCollate
DEVMODE.dWord ( 82 ); //dmFormName[CCHFORMNAME]; ???
DEVMODE.word ( 84 ); //dmLogPixels
DEVMODE.dWord ( 92 ); //dmBitsPerPel
DEVMODE.dWord ( 100 ); //dmPelsWidth
DEVMODE.dWord ( 108 ); //dmPelsHeight
DEVMODE.dWord ( 120 ); //dmDisplayFlags
DEVMODE.dWord ( 128 ); //dmNup
DEVMODE.dWord ( 136 ); //dmDisplayFrequency
if (conPeek(con, 4) >= 0x0400)
{
DEVMODE.dWord ( 144 ); //dmICMMethod
DEVMODE.dWord ( 152 ); //dmICMIntent
DEVMODE.dWord ( 160 ); //dmMediaType
DEVMODE.dWord ( 168 ); //dmDitherType
DEVMODE.dWord ( 176 ); //dmReserved1
DEVMODE.dWord ( 182 ); //dmReserved2
}
if (conPeek(con, 4) >= 0x0500 || conPeek(con, 4) >= 0x0400)
{
DEVMODE.dWord ( 190 ); //dmPanningWidth
DEVMODE.dWord ( 198 ); //dmPanningHeight
}
return DEVMODE;
}
Неуверен что правильно делаю смещение для BCHAR dmDeviceName[CCHDEVICENAME] и BYTE dmFormName[CCHFORMNAME]; Я делаю dWord и смещение на 8.