簡體   English   中英

從'DWORD(*)(void *)'到'DWORD(*)(void *)'的無效轉換

[英]invalid conversion from 'DWORD (*)(void*)' to 'DWORD (*)(void*)'

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)[...]

如果StartWinampThread是成員函數,則必須為靜態。

請參閱此處: 在C中它是可安全使用的靜態成員函數指針,用於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)
}

它與對象有關嗎-對象的StartWinampThread方法有一個隱式的“ this”參數,因為它是類的成員。

如果將其更改為獨立方法但保留相同的簽名(例如,來自

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

到DWORD WINAPI StartWinampThread(void * lpParam)[...]

(我知道它對您不起作用,我只是想看看它是否消除了編譯器的抱怨)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM