在串行通信中解释DWORD使用DWORD

时间:2012-05-11 06:53:25

标签: c serial-port readfile

我现在正在使用C学习与win32的串行通信。从串口读取如下。

DWORD dwEventMask;
DWORD dwSize;

if(!SetCommMask(hSerial, EV_RXCHAR)){
    //Error handling
    printf("Error Setting Comm Mask \n");
}

if(WaitCommEvent(hSerial, &dwEventMask, NULL))
{
    unsigned char szBuf[1024];
    DWORD dwIncommingReadSize;

    do
    {
        if(ReadFile(hSerial, &szBuf, 1, &dwIncommingReadSize, NULL) != 0) {
            //Handle Error Condition
        }

        if(dwIncommingReadSize > 0)
        {
            dwSize += dwIncommingReadSize;
            sb.sputn(&szBuf, dwIncommingReadSize);
            printf("Reading from port \n");
        }
        else{
        //Handle Error Condition
        }
        printf("Reading data from port \n");
    } while(dwIncommingReadSize > 0);
}
else
{
        //Handle Error Condition
}

他们使用DWORD dwIncommingReadSize for while condition(while(dwIncommingReadSize> 0);.

请解释这种情况如何令人满意。没有修改可见。

请再次解释以下部分。

if(dwIncommingReadSize > 0)
{
    dwSize += dwIncommingReadSize;
    sb.sputn(&szBuf, dwIncommingReadSize);
    printf("Reading from port \n");
 }

1 个答案:

答案 0 :(得分:2)

这一行:

if(ReadFile(hSerial, &szBuf, 1, &dwIncommingReadSize, NULL)

dwIncommingReadSize地址传递给该函数(不管它是否拼写错误),以便它可以将其更改为任何想要的地址。

它类似于:

void fn (int *x) { *x = 42; }
:
int xyzzy = 1;
fn (&xyzzy);
// Here, xyzzy is now 42.

就你的第二个问题而言,如果没有看到更多的代码就很难说,但看起来它只是增加了读入的每个数据块的“总大小”变量(加上{{1}应该这样做。

这是典型的情况,单个读取可能无法获得您想要的所有数据 - 您只需存储所获得的数据,然后返回以获取更多数据。