无法转换为' unsigned int *'到了' LPDWORD'

时间:2014-07-03 16:55:58

标签: c++ visual-c++ c++11

我有以下代码:

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 redunsigned long red相同 所以在函数ReadFile()中,第四个参数&red应该是unsigned long *,不应该吗?

1 个答案:

答案 0 :(得分:6)

intlong被认为是不同的类型,即使它们都是相同大小的整数类型(在Microsoft下)。如果没有明确的演员,则无法转换指向不同类型的指针。

您似乎没有使用DWORD的标准定义,而是替换了您自己的标准定义。不要那样做。