Win98 ~ WinXp へ移行したら・・・ – プログラミング – Home

Win98 ~ WinXp へ移行した...
 
通知
すべてクリア

Win98 ~ WinXp へ移行したら・・・


たけ
 たけ
(@たけ)
ゲスト
結合: 25年前
投稿: 116
Topic starter  

はじめまして。たけと申します。

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;
}
}


引用解決済
トピックタグ
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

とりあえず、GetLastErrorでエラー内容がどうなっているかを確認するのが
まずやらなければならない事ではないですか?

ところで、

if(NULL == (lpBuff = new BYTE [dwNeed])) return NULL;
if(NULL == (lpBuff = new int [dwNeed])) return NULL;

これってリークしてませんか?
なぜ、二回newしているのかも良く分からないし。


返信引用
たけ
 たけ
(@たけ)
ゲスト
結合: 25年前
投稿: 116
Topic starter  

PATIOさん、早速の書き込みありがとうございます。

if(NULL == (lpBuff = new BYTE [dwNeed])) return NULL;
if(NULL == (lpBuff = new int [dwNeed])) return NULL;
この2行ですが、いろいろ試しているうちに、
下の行を削除するのを忘れてしまいました。

私も今いろいろ調べているのですが、
どうやら、EnumPrinters の PRINTER_ENUM_DEFAULT が Win9X 系でしか、
つかえないようです。

過去のログにも記されているのですが、
まだここをどうやって解決するかわかりません。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 24年前
投稿: 1421
 

OSに応じた方法でプリンタ名を取得する方法を見つけました。
http://community.borland.com/article/0,1410,28000,00.html


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました