C言語関係掲示板

過去ログ

No.1219 WriteFileのwarning

[戻る] [ホームページ]
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 だけを対象に考えれば確かに問題ないと思います。