はじめまして。たけと申します。
MCVC++ 5.0 で作成されたプログラムがありまして、
開発時の OS は Win98 でした。
その時は正常に印刷していたのですが、
OS を WinXp に移行しましたら、
印刷できなくなってしまいました。
どうやらプリンタの情報取得がうまくいってないようなのですが、
どうしたらよいのかまったくわからず、質問させていただきました。
どなたかご教授くださればとてもとても幸いです。
一応、下記に問題となっております、コードを一部書いておきます。
// プリンタ情報を取得する
BYTE *lpBuff = NULL; //
プリンタ情報取出しバッファ
DWORD dwNeed = 0; //
DWORD dwReturn = 0; //
PRINTER_INFO_1 *lpPrnInf = NULL; // プリンタ情報構
造体
// プリンタ情報取出しバッファの確保
if(NULL == (lpBuff = new BYTE [BUFFSIZE])) return NULL;
memset(lpBuff, 0, (BUFFSIZE));
lpPrnInf = (PRINTER_INFO_1 *)lpBuff;
// プリンタ情報取得
if(!EnumPrinters(PRINTER_ENUM_DEFAULT, NULL,
1, (LPBYTE)lpBuff, BUFFSIZE, &dwNeed,
&dwReturn))
{
// 失敗したら 一回はリトライする
delete [] lpBuff; lpBuff = NULL;
if(NULL == (lpBuff = new BYTE [dwNeed])) return NULL;
if(NULL == (lpBuff = new int [dwNeed])) return NULL;
memset(lpBuff, 0, (dwNeed));
lpPrnInf = (PRINTER_INFO_1 *)lpBuff;
if(!EnumPrinters(PRINTER_ENUM_DEFAULT, NULL,
1, (LPBYTE)lpBuff,
BUFFSIZE, &dwNeed, &dwReturn))
{
delete [] lpBuff;
return NULL;
}
}
とりあえず、GetLastErrorでエラー内容がどうなっているかを確認するのが
まずやらなければならない事ではないですか?
ところで、
if(NULL == (lpBuff = new BYTE [dwNeed])) return NULL;
if(NULL == (lpBuff = new int [dwNeed])) return NULL;
これってリークしてませんか?
なぜ、二回newしているのかも良く分からないし。
PATIOさん、早速の書き込みありがとうございます。
if(NULL == (lpBuff = new BYTE [dwNeed])) return NULL;
if(NULL == (lpBuff = new int [dwNeed])) return NULL;
この2行ですが、いろいろ試しているうちに、
下の行を削除するのを忘れてしまいました。
私も今いろいろ調べているのですが、
どうやら、EnumPrinters の PRINTER_ENUM_DEFAULT が Win9X 系でしか、
つかえないようです。
過去のログにも記されているのですが、
まだここをどうやって解決するかわかりません。
OSに応じた方法でプリンタ名を取得する方法を見つけました。
http://community.borland.com/article/0,1410,28000,00.html