我有以下代码:
size_t lufread(void *ptr,size_t size,size_t n,LUFILE *stream)
{
unsigned int toread = (unsigned int)(size*n);
if (stream->is_handle)
{
DWORD red;
BOOL res = ReadFile(stream->h,ptr,toread,&red,NULL);
if (!res)
stream->herr=true;
return red/size;
}
if (stream->pos+toread > stream->len)
toread = stream->len-stream->pos;
memcpy(ptr, (char*)stream->buf + stream->pos, toread);
DWORD red = toread;
stream->pos += red;
return red/size;
}
这是编译器错误:
error C2664: 'ReadFile' : cannot convert parameter 4 from 'unsigned int *' to 'LPDWORD'
我不理解,因为DWORD red
与unsigned long red
相同
所以在函数ReadFile()
中,第四个参数&red
应该是unsigned long *
,不应该吗?
答案 0 :(得分:6)
int
和long
被认为是不同的类型,即使它们都是相同大小的整数类型(在Microsoft下)。如果没有明确的演员,则无法转换指向不同类型的指针。
您似乎没有使用DWORD
的标准定义,而是替换了您自己的标准定义。不要那样做。