为什么SendMessageTimeout不接受DWORD?

时间:2014-07-21 20:46:40

标签: c++ qt

我正在尝试使用一些来自API的C代码(它不像C ++编译器),但我遇到了一些麻烦。我有这段代码:

// send the request (allow up to 9 tries)
while ((++i < 10) && !SendMessageTimeout(
        m_hWnd,       // FS6 window handle
        m_msg,        // our registered message id
        m_atom,       // wParam: name of file-mapping object
        0,            // lParam: offset of request into file-mapping obj
        SMTO_BLOCK,   // halt this thread until we get a response
        2000,             // time out interval
        &dwError))    // return value || dwError is a DWORD
{   Sleep(100); // Allow for things to happen
}

它返回一个错误(我正在使用Qt Creator):

error: C2664: 'LRESULT SendMessageTimeoutW(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR)' : cannot convert argument 7 from 'DWORD *' to 'PDWORD_PTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

我没有使用DWORD和PDWORD_PTR的经验,所以我不太明白这一点。任何帮助表示赞赏。如果您需要查看更多代码,请告诉我,但我认为这一切都是相关的。

2 个答案:

答案 0 :(得分:4)

dwError必须是DWORD_PTR,而不是DWORD

请注意DWORD_PTR并不意味着&#34;指向DWORD&#34;的指针,它意味着&#34;一个至少与指针一样大的DWORD&#34;。

答案 1 :(得分:0)