封筒に住所を印刷するプログラムに取り組んでいます。プログラムの一部として、用紙サイズなどのデフォルトの印刷設定の一部を変更する必要があります。これを行うために、以下にリストされている DocumentProperties コードを使用しています。
HANDLE hPrinter;
char pDevice[35];
strcpy(pDevice,"Test");
PRINTDLG pd;
string name;
ofstream print;
memset( &pd, 0, sizeof( pd ) );
pd.lStructSize = sizeof( pd );
pd.Flags = PD_RETURNDC;
OpenPrinter(pDevice,&hPrinter,NULL);
DWORD dwNeeded = ::DocumentProperties(NULL, hPrinter, pDevice, NULL, NULL, 0);
cout << dwNeeded << endl;
PDEVMODE dev = (PDEVMODE)::malloc(dwNeeded);
cout << "2" << endl;
DocumentProperties(NULL, hPrinter, pDevice, dev, NULL, DM_OUT_BUFFER);
cout << "3" << endl;
cout << "3b" << endl;
dev.dmFields |= DM_COPIES; // define the number of copies as 3
cout << "4" << endl;
dev.dmCopies = 3; // define, which field was changed
cout << "5" << endl;
DocumentProperties(NULL, hPrinter, pDevice, dev, dev, DM_IN_BUFFER | DM_OUT_BUFFER);
cout << "set" << endl;`
問題は、コードをコンパイルしようとするたびにこれらのエラーが発生することです
main.cpp:98:10: error: request for member 'dmFields' in 'dev', which is of non-class type 'DEVMODEA*'
main.cpp:100:19: error: request for member 'dmCopies' in 'dev', which is of non-class type 'DEVMODEA*'`
dev.dmCopies と dev.dmFields を dev->dmCopies と dev->dmFields に変更しようとしましたが、プログラムは 3b になって終了します。MSDN によると、これらのフィールドは機能するはずです ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms646843(v=vs.85).aspx )。これらのエラーが発生します:(