初めて書き込みさせて頂きます、坂本と申します。
VC++、win32APIについて全くの素人なのですが、仕事でVBからUNICODEを
プリンタ出力する必要性に迫られおり、色々調べて上記コードまで作成したのですが、うまく印刷されません(?に化けてしまう)
以下のようなコードを書いて、DLLとしてVBから呼び出しをしています。
// 唯一の CTestdll2App オブジェクト
CTestdll2App theApp;
void CTestdll2App::PrintUnicodeData()
{
FILE *fp; // ファイルポインタ
wchar_t sFile[MAX_PATH]; // ファイルパス
wchar_t sBuff[256 * 2];
wchar_t sBuffUni[256];
HDC dcPrint; // プリンタデバイスコンテキスト
DOCINFO docInfo ; // 印刷情報
// 初期化
memset(sBuff, 0x00, sizeof(sBuff));
memset(sBuffUni, 0x00, sizeof(sBuffUni));
/** ファイル読み込み **/
wcscpy(sFile, L"unicode.txt" ); // 読込みファイルパス作成
fp = _wfopen(sFile, L"rb"); // バイナリ読込みモードでファイルオープン
if(NULL == fp){
AfxMessageBox(L"ファイルオープンエラー");
return;
}
fgetws(sBuffUni, sizeof(sBuffUni), fp); // 1行読込み
//fgets(sBuff, sizeof(sBuff), fp);
fclose( fp ); // ファイルクローズ
/** 印刷 **/
dcPrint = CreateDC( L"WINSPOOL", L"\\\\nl2sv2\\HP1-LBP1810-1", NULL, 0);
// 初期化
memset( &docInfo, NULL, sizeof( DOCINFO ));
StartDoc( dcPrint, &docInfo); // 印字開始
StartPage( dcPrint );
// TextOutWを使用してUnicode.txtから読み込んだ文字列を出力してみる。
TextOutW(dcPrint, 0, 1, sBuffUni, sizeof(sBuffUni));
EndDoc( dcPrint ); // 印字終了
DeleteDC( dcPrint ); // デバイスコンテキストの破棄
AfxMessageBox(L"印刷しましたよ");
return;
}
どなたか、ご教授願えないでしょうか?
宜しくお願い致します。
自己レスです。
環境を書き忘れました。
WindowsXP(Homeエディション)、VB、VC++ともにVisualStudio6.0です。
宜しくお願い致します。
とりあえず確認なんですけど、プリンタではなく画面に出力した場合は
正常なのでしょうか?
あと、EndPage()が必要だと思います。
再び自己レスです。
最初のソースにフォントの設定を追加したところ、
UNICODEにしかない文字が正しく印刷されました。
お騒がせしまして申し訳ありませんでした。