2010-12-20 127 views
1

invalid conversion from 'DWORD (*)(void*)' to 'DWORD (*)(void*)'。 蛋糕==謊言 1 == 0無效從'DWORD(*)(void *)'轉換爲'DWORD(*)(void *)'

我不知道這是什麼意思......我知道了這個代碼

HANDLE CPlugin::CreateWinampThread() || 
{         __VVVVVVVV__ 
    hWinampThreadHandle = (HANDLE)CreateThread(NULL, 0, StartWinampThread, (void*)this, 0, &dwWinampThreadID); 
    if (!hWinampThreadHandle) 
     return 0; 

    CloseHandle(hWinampThreadHandle); 
    return hWinampThreadHandle; 
} 

. 

DWORD WINAPI CPlugin::StartWinampThread(void* lpParam)[...] 
+1

是CPlugin :: StartWinampThread靜態的?你不能傳遞一個非靜態成員函數作爲回調,儘管我希望編譯器提及一些關於「thiscall」的內容,如果你試圖(但也許你的編譯器不?)。 – 2010-12-20 17:11:39

+0

爲什麼不告訴我們在CreateThread()中使用的變量的類型*?還有,哪一行你會得到那個錯誤? – Nawaz 2010-12-20 17:12:50

+0

nope它不...哦,我愚蠢的....所以我想生病讓它的代理功能... – n00b 2010-12-20 17:13:38

回答

5

StartWinampThread必須是靜態的,如果它是成員函數。

+0

真實的,但是這並沒有擺脫錯誤o0 – n00b 2010-12-20 17:22:52

+0

因爲這指出了超級失敗我的身邊,我接受它作爲答案,但解決錯誤的東西是添加一個(LPTHREAD_START_ROUTINE)鑄 – n00b 2010-12-20 17:34:59

+0

不投,只是隱藏了一個問題。無論它可能是什麼。 – 2010-12-20 17:54:11

0

是否與對象一樣 - 有一個隱含的「這個」參數設置爲你的對象的StartWinampThread方法,因爲它是一個類的成員。

如果你改變它是一個獨立的方法,但保持從

DWORD WINAPI CPlugin::StartWinampThread(void* lpParam)[...] 

即相同的簽名 DWORD WINAPI StartWinampThread(void *的lpParam)會發生什麼[...]

(我知道它不會爲你工作,我只是有興趣,看它是否刪除該編譯器的投訴)

+0

將其更改爲 DWORD WINAPI StartWinampThreadProxy(void * param)CPlugin * ths =(CPlugin *)param; ths-> StartWinampThread(PARAM); } 同樣的錯誤 – n00b 2010-12-20 17:20:48

2

在這裏看到:in-c-is-it-safe-portable-to-use-static-member-function-pointer-for-c-api-callb爲什麼你需要使用一個外部的「C」

正確的方法是不會停這樣的:

HANDLE CPlugin::CreateWinampThread() || 
{         __VVVVVVVV__ 
    hWinampThreadHandle = (HANDLE)CreateThread(NULL, 0, ::StartWinampThread, (void*)this, 0, &dwWinampThreadID); 
    if (!hWinampThreadHandle) 
     return 0; 

    CloseHandle(hWinampThreadHandle); 
    return hWinampThreadHandle; 
} 

. 

// A callback function for C code must have C linkage. 
// That is not possable for C++ static member functions. 
extern "C" DWORD WINAPI StartWinampThread(void* lpParam) 
{ 
    // You can always call your static member function here. 
    CPlugin::StartWinampThread(lpParam) 
} 
相關問題