无法从'unsigned int *'转换为'LPDWORD'

Cannot convert from 'unsigned int *' to 'LPDWORD'

本文关键字:转换 LPDWORD int unsigned      更新时间:2023-10-16

我有以下代码:

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()中,第4个参数&red应该是unsigned long *,不是吗?

intlong被认为是不同的类型,尽管它们都是相同大小的整数类型(在Microsoft下)。指向不同类型的指针如果不进行显式强制转换,则不能进行转换。

看来你没有使用DWORD的标准定义,而是替换了你自己的。别这样。