No.16089![]() |
WriteFileについて 投稿者---さとる(2004/08/06 09:13:34) |
||
Win2k,vc++6.0です。 DWORD dwWrittelen; WriteFile( vhand , sbuf , len , &dwWrittelen , NULL) ) { コンパイルは通るけどwarning C4267 'size_t' から 'DWORD' に変換しました。 と出ます。何か気持ちが悪いんですけど 何か間違ってますか? |
No.16091![]() |
Re:WriteFileについて 投稿者---REE(2004/08/06 11:45:34) |
||
>Win2k,vc++6.0です。 > >DWORD dwWrittelen; > >WriteFile( vhand > , sbuf > , len > , &dwWrittelen > , NULL) ) >{ > >コンパイルは通るけどwarning C4267 > 'size_t' から 'DWORD' に変換しました。 >と出ます。何か気持ちが悪いんですけど >何か間違ってますか? これだけでは分かりません。 最低限引数にしている変数の型を全て提示し、 警告も省略せずにそのまま書いてください。 |
No.16092![]() |
Re:WriteFileについて 投稿者---さとる(2004/08/06 12:56:20) |
||
コードを記述します。 よろしくお願いします。 hHand = CreateFile(dir_name, GENERIC_WRITE, 0, (LPSECURITY_ATTRIBUTES) NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); DWORD dwWrittelen; buff="テスト"; if( FALSE == WriteFile( hHand, buff, strlen(buff), &dwWrittelen, NULL) ) { &dwWrittelenのところで下記のメッセージがでます。 エラー内容 warning C4267: '引数' : 'size_t' から 'DWORD' に変換しました。データが失われているかもしれません。 |
No.16102![]() |
Re:WriteFileについて 投稿者---REE(2004/08/06 18:55:45) |
||
>if( FALSE == WriteFile( hHand, > buff, > strlen(buff), > &dwWrittelen, > NULL) ) >{ > > >&dwWrittelenのところで下記のメッセージがでます。 >エラー内容 >warning C4267: '引数' : 'size_t' から 'DWORD' に変換しました。データが失われているかもしれません。 このメッセージは &dwWrittelenではなく、第3引数のところで出ているはずです。 WriteFileの第3引数はDWORDですが、strlenの戻り値の型はsize_tですので、そこで変換が行われています。 通常ですと、DWORDとsize_tは同じサイズなので問題ないでしょう。 オバーフローするとも思えません。 無視しても構いませんが、この警告が出ないようにしたいときには、 引数のところで、(DWORD)strlen(buff) とします。 |
No.16103![]() |
Re:WriteFileについて 投稿者---Ban(2004/08/06 19:05:19) |
||
size_t は unsigned int になってる模様(VC7.1)。 一方、DWORD は unsigned long ですから、 Win32 だけを対象に考えれば確かに問題ないと思います。 |