2010-06-21 67 views
1
 HANDLE hThread; 
    DWORD dwThreadId; 

     hThread = CreateThread( 
    NULL,     // default security attributes 
    0,      // use default stack size 
    MyThreadFunction,  // thread function name 
    0,      // argument to thread function 
    0,      // use default creation flags 
    &dwThreadId);   // returns the thread identifier <--Debugger takes me to this line? 

該錯誤指定第三個參數,但是當我雙擊錯誤,它將我帶到最後一個參數?
嘗試運行MSDN CreateThread的例子http://msdn.microsoft.com/en-us/library/ms682453%28VS.85%29.aspx無法理解此錯誤創建一個線程

error C2664: 'CreateThread' : cannot convert parameter 3 from 'void (void)' to 'unsigned long (__stdcall *)(void *)' 
     None of the functions with this name in scope match the target type 

回答

1

單擊錯誤帶你到最後一個參數,因爲去到錯誤功能只能通過聲明去,整個函數調用是一個語句。

基本上,你的問題是MyThreadFunction有錯誤的簽名。它應該是unsigned long __stdcall MyThreadFunction(void*)(或其等價物),但你寫了void MyThreadFunction(void)(或其等價物)。

1

當您雙擊錯誤,它帶來了對發生錯誤的來源。由於函數調用表達式跨越多行,它將選擇表達式的最後一行。

問題是MyThreadFunction沒有正確的功能類型。 MyThreadFunction是一個不帶參數且不返回任何內容的函數。您需要將指針傳遞給帶有一個參數的函數(一個void*)並返回一個unsigned long

2

您的函數簽名與預期的簽名不匹配。

你的MythreadFunction函數應該返回ULONG。

喜歡的東西:

DWORD WINAPI MyThreadFunction(LPVOID lpParameter) { 
} 
3

調試器只是把你帶到聲明的結尾。

在任何情況下,您的函數簽名都是錯誤的,需要匹配函數指針類型。對於CreateThread,應該是:

DWORD WINAPI ThreadProc(LPVOID lpParameter);