invalid conversion from 'DWORD (*)(void*)' to 'DWORD (*)(void*)'。cake==lie 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)[...]发布于 2010-12-21 01:13:08
如果StartWinampThread是成员函数,则它必须是静态的。
发布于 2010-12-21 02:47:45
查看这里: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)
}发布于 2010-12-21 01:17:30
这与对象有关吗?你的对象的StartWinampThread方法有一个隐含的'this‘参数,因为它是一个类的成员。
如果您将其更改为独立方法,但保留相同的签名,会发生什么情况?
DWORD WINAPI CPlugin::StartWinampThread(void* lpParam)[...]到双字WINAPI StartWinampThread(void* lpParam)...
(我知道它不会对你起作用,我只是想看看它是否能消除编译器的抱怨)
https://stackoverflow.com/questions/4491976
复制相似问题