2012-05-14 9 views
0

シリアルポートのwriteFile機能をfuctionaに組み込み、その関数を何度か呼び出す必要があります。私は次のコードを書いた。しかし関数はfalseを返す。私はエラーを見つけることができませんでした。シリアルポートへのWriteFile書き込み機能付き

bool WriteBuffer (char *lpBuf,DWORD dwToWrite){ 

// DWORD dwBytesWritten; 
// DWORD dwToWrite; 
printf("%s", lpBuf); 

if(!WriteFile(hSerial, lpBuf, sizeof(lpBuf) ,&dwBytesWritten, NULL)) 

     { 

     FormatMessage(
     FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 
     NULL, 
     GetLastError(), 
     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
     (LPWSTR)&lastError, 
     1024, 
     NULL); 

    CloseHandle(hSerial); 
    hSerial=NULL; 
    printf("ERROR in WRITE FILE \n"); 
    return false; 
//Handle Error Condition 
} 
printf("You wrote'%s'",lpBuf); 


return true; 
} 
+0

hSerialが作成されたコードを投稿できますか? – Jay

答えて

1

あなたはnNumberOfBytesToWriteパラメータにsizeof(lpBuf)を渡しています。しかし、sizeof(lpBuf)は単純にポインタのサイズです。あなたはdwToWrite私は推測する必要があります渡す必要があります。

これで問題が解決しない場合、hSerialのエラーのもう1つの原因は無効です。

GetLastErrorFormatMessageを呼び出すのに苦労したことがありますが、返された機能が何であるか教えていただければ役に立ちました。

+0

しかし、なぜsizeof(lpBuf)を渡すと失敗するのでしょうか? (dwToWriteがsizeof(lpBuf)より小さい場合は、より少ないバイト数またはそれ以上のバイトを書き込む必要があります。より多くのバイトが発生すると、「配列の範囲外の」読み込みにつながる可能性がありますが、失敗の原因になりますか? – Jay

+0

@Jay WriteFileがバッファの終わりを超えて書き込みを試みると、AVが発生する可能性があります。ここにコードを書いているとは言えません。 hSerialは、他の可能性のある障害ポイントです。 –

+0

すみません。しかし、AVは何ですか? – Jay

関連する問題