上田です。
ご指摘の通りに新たにテスト用の別関数(下記記載)をつくり
本来のプログラムの先頭に挿入してRS232Cプリンタで印刷できるか
どうかをテストしました。
結果は、98、XP共正常に印刷することが確認されました。
この後は本来のプログラムでRS232Cに関係する関数全てを
チェックすることになりますが、どこにポイントを置けば
良いか提案いただければありがたいです。
なお、RS232Cの通信だけでなく、当初はキー入力を受付ていたのですが
現在はファンクションキー以外は受け付けないように変わってきています。
テストに用いた関数と変数は次の通り
HANDLE hComm1; // 本来ではstaticを指定
DCB dcb;
COMMTIMEOUTS timeouts;
int test_com1open(void);
int test_setcom1(HANDLE);
int test_timeoutset(HANDLE);
/* DTR/DSR制御 */
/* 回線オープン */
int rsopen2(void)
{
int sw,sw1,sw2,sw3;
sw = 0; sw1 = 0; sw2 = 0; sw3 = 0;
sw1 = test_com1open();
sw2 = test_setcom1(hComm1);
sw3 = test_timeoutset(hComm1);
PurgeComm( hComm1,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
if(sw1 != 0){ sw++; }
if(sw2 != 0){ sw++; }
if(sw3 != 0){ sw++; }
return(sw);
}
int test_com1open(void)
{
int sw;
sw = 1;
hComm1 = CreateFile(
"COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(hComm1 == INVALID_HANDLE_VALUE){
sw = 0;
}
return(sw);
}
// sw =0は失敗
int test_com1write(HANDLE hd,char *data)
{
BOOL sw;
DWORD datalen;
sw = WriteFile(hd,data,strlen(data),&datalen,NULL);
if(sw == 0){ return(0); }
else{ return(1); }
}
int test_setcom1(HANDLE hd)
{
BOOL sw1,sw2;
int sw;
sw = 0;
sw1 = GetCommState(hd,&dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.fParity = FALSE;
dcb.StopBits = ONESTOPBIT;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = TRUE;
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE; // DTR
sw2 = SetCommState( hd,&dcb);
if(sw1 != 0){ sw++; }
if(sw2 != 0){ sw++; }
return(sw);
}
int test_timeoutset(HANDLE hd)
{
BOOL sw1,sw2;
int sw;
sw = 0;
sw1 = GetCommTimeouts(hd,&timeouts);
timeouts.ReadIntervalTimeout = MAXDWORD;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 1000;
timeouts.WriteTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 60000;
sw2 = SetCommTimeouts(hd,&timeouts);
if(sw1 != 0){ sw++; }
if(sw2 != 0){ sw++; }
return(sw);
}
// 頭に挿入した関数
int test_com1(void)
{
int i,sw,sw1,sw2,sw3,sw4,sw5;
char data[257];
cls_str(data,257);
sprintf(data,"%s","1234567890 1234567890 ABCDEFG HIJKLMN OPQRSTUWDXYZ
abcdeghijklmnopqrstuvwxyz 1234567890 1234567890");
sw = 0; sw1 = 0; sw2 = 0; sw3 = 0; sw4 = 0; sw5 = 0;
sw1 = test_com1open();
sw2 = test_setcom1(hComm1);
sw3 = test_timeoutset(hComm1);
PurgeComm( hComm1,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
for(i = 0; i<10; i++){
sw4 = test_com1write(hComm1,data);
}
sw5 = CloseHandle(hComm1);
if(sw1 != 0){ sw++; }
if(sw2 != 0){ sw++; }
if(sw3 != 0){ sw++; }
if(sw4 != 0){ sw++; }
if(sw5 != 0){ sw++; }
return(sw);
}
/***********************
堺市南区原山台
上田 恭平
E_Mail ***@sannet.ne.jp
************************/