invalid conversion from 'DWORD (*)(void*)' to 'DWORD (*)(void*)'
。
蛋糕==谎言
1 == 0
我不知道这意味着什么......我在这段代码中得到了它
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)[...]
答案 0 :(得分:5)
如果StartWinampThread是成员函数,则它必须是静态的。
答案 1 :(得分:2)
请参阅此处:in-c-is-it-safe-portable-to-use-static-member-function-pointer-for-c-api-callb了解为什么需要使用extern“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)
}
答案 2 :(得分:0)
是否与对象有关 - 对象的StartWinampThread方法有一个隐含的'this'参数,因为它是一个类的成员。
如果您将其更改为独立方法但保持相同的签名(即
)会发生什么情况DWORD WINAPI CPlugin::StartWinampThread(void* lpParam)[...]
要 DWORD WINAPI StartWinampThread(void * lpParam)[...]
(我知道这对你不起作用,我只是想知道它是否删除了编译器的抱怨)