宜しくお願いします。
開発環境は、WindowsXP Visual Studio 2005 VC++ MFC
以下のコードを実行すると、受信が遅い、受信結果が文字化けする現象がでています。
ハイパーターミナルどうしで送受信が正常に動くのを確認した後に、ハイパーターミナルを
以下のプログラム間ではうまくいきません。
CString BufCom;
BOOL bRet;
hCom = CreateFile("COM1", // ファイル名
GENERIC_READ + GENERIC_WRITE, // アクセスモード
0, // 共有モード
NULL, // セキュリティ記述子
OPEN_EXISTING, // 作成方法
FILE_ATTRIBUTE_NORMAL, // ファイル属性
NULL); // テンプレートファイルのハンドル
if(hCom == INVALID_HANDLE_VALUE)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
0,
NULL);
MessageBox((LPCWSTR)lpMsgBuf,_T("BC-System"),MB_OK + MB_ICONWARNING+MB_TOPMOST);
return;
}
bRet = GetCommState(hCom, &dcb);
if(!bRet)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
0,
NULL);
MessageBox((LPCWSTR)lpMsgBuf,_T("BC-System"),MB_OK + MB_ICONWARNING+MB_TOPMOST);
CloseHandle(hCom);
return;
}
dcb.BaudRate = CBR_9600;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.fOutxDsrFlow = TRUE;
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
bRet = SetCommState(hCom, &dcb);
if(!bRet)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
0,
NULL);
MessageBox((LPCWSTR)lpMsgBuf,_T("BC-System"),MB_OK + MB_ICONWARNING+MB_TOPMOST);
CloseHandle(hCom);
return;
}
bRet = EscapeCommFunction(hCom, SETRTS);
if(!bRet)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
0,
NULL);
MessageBox((LPCWSTR)lpMsgBuf,_T("BC-System"),MB_OK + MB_ICONWARNING+MB_TOPMOST);
CloseHandle(hCom);
return;
}
BOOL bRet;
char Buf[256];
DWORD Siz;
MSG msg;
bRet = ReadFile(hCom, // ファイルのハンドル
Buf, // データバッファ
16, // 読み取り対象のバイト数
&Siz, // 読み取ったバイト数
NULL); // オーバーラップ構造体のバッファ
if(bRet == 0)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf,
0,
NULL);
MessageBox((LPCWSTR)lpMsgBuf,_T("BC-System"),MB_OK + MB_ICONWARNING+MB_TOPMOST);
}else if(Siz > 0){
txtNGSetupBC.SetWindowTextW(Buf);
}
}