【问题标题】:Why the following c++ snippet gives exception?为什么下面的 c++ 代码段会给出异常?
【发布时间】:2010-09-05 16:10:28
【问题描述】:
VIDEOINFOHEADER *pVih = (VIDEOINFOHEADER*)pmtConfig->pbFormat;;
...
WriteFile( hHandle, pVih, sizeof(VIDEOINFOHEADER), NULL, NULL );

调试发现WriteFile报异常,如何解决?

【问题讨论】:

  • 请向我们提供更多信息:关于例外情况、如何​​获取句柄以及您如何处理 pVih
  • 你能告诉我们异常是什么吗?

标签: c++ windows writefile


【解决方案1】:

可能,pmtConfig->pbFormat 为 NULL 或无效。请向我们提供有关异常的更多详细信息。

【讨论】:

    【解决方案2】:

    pVih 是否已初始化?如果不是,那是你的问题。

    跟进

    由于pVih被初始化,我looked at the documentation。如果第五个参数 lpOverlapped 为 NULL,则第四个参数 lpNumberOfBytesWritten 不能为 NULL。提供一个指向变量的指针以接受写入的字节数。

    第二次跟进

    pmtConfig->pbFormat 是否正确指向 VIDEOINFOHEADER

    【讨论】:

    • 将 NULL 作为 lpNumberOfBytesWritten 传递会导致 ERROR_INVALID_PARAMETER 失败,而不是异常。
    • @user:它正确初始化了吗?问题中的初始化包含强制转换,所以您确定您强制转换的指针确实指向VIDEOINFOHEADER
    • 原来是cannot be NULL if the fifth parameter, lpOverlapped, is NULL,但是为什么呢?
    • @user198729:简短的回答是因为函数是这样指定的。虽然 Microsoft 的 API 通常莫名其妙地粗糙,但原因可能是因为设想非异步调用(即代码将等待写入完成后再继续)总是想知道传输了多少字节。在我看来,可能会有没人关心的情况,但这与WriteFile 的设计师的观点不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多