2017-01-02 7 views
0

QT内でこのコード[RasDialAsync.c](https://github.com/pauldotknopf/WindowsSDK7-Samples/blob/master/netds/ras/rasdialasync/RasDialAsync.c)を使用しようとしていますが、 。これは何ですか ?どうすればこの問題を解決できますか?ここでは、関数ヘッダーは次のとおりです。
マイRasDialFunc機能:void(WI​​NAPI *)(...)からLPVOIDへの無効なキャスト

void WINAPI RasDialFunc(UINT unMsg, 
        RASCONNSTATE rasconnstate, 
        DWORD dwError) 


、ここでは私のコードの一部です:

LPRASDIALPARAMS lpRasDialParams = NULL; // Structure to store the RasDial parameters 
HRASCONN  hRasConn = NULL;   // Handle to RAS connection 
DWORD   nRet = 0;     // Return value from a function 
lpRasDialParams = (LPRASDIALPARAMS) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(RASDIALPARAMS)); 
if (NULL == lpRasDialParams) 
{ 
    qDebug() << "HeapAlloc failed\n"; 
} 
lpRasDialParams->dwSize =sizeof(RASDIALPARAMS); 
StringCchCopy(lpRasDialParams->szEntryName, CELEMS(lpRasDialParams->szEntryName), rasConn); 
StringCchCopy(lpRasDialParams->szUserName, CELEMS(lpRasDialParams->szUserName), username); 
StringCchCopy(lpRasDialParams->szPassword, CELEMS(lpRasDialParams->szPassword), password); 

hRasConn = NULL; 
nRet = RasDial(NULL, NULL, lpRasDialParams, 0,&RasDialFunc, &hRasConn); 
if (nRet != 0) 


、ここではエラーが

main.cpp:202: error: invalid conversion from 'void (__attribute__((__stdcall__)) *)(UINT, tagRASCONNSTATE, DWORD) {aka void (__attribute__((__stdcall__)) *)(unsigned int, tagRASCONNSTATE, long unsigned int)}' to 'LPVOID {aka void*}' [-fpermissive] 
    nRet = RasDial(NULL, NULL, lpRasDialParams, 0,&RasDialFunc, &hRasConn); 
                     ^
+0

static_castを(&RasDialFunc) – Olipro

+0

@Olipro同じエラー:無効なキャスト。 ... –

+0

'RasDial()'の宣言が見えません。これは必須の情報です。 – IInspectable

答えて

0
です

これらの以下のコメントは私です答え:

関数ポインタと オブジェクトポインタ間のキャストし、技術的には、違法です。標準により、それらのサイズを変えることができます。 については、WinAPIでは多くの場所でこのようなキャストが必要です。 (私はPOSIXの機能もあります)。 MSVCコンパイラはそのようなキャストについて一度も不平を言うことはありませんでしたが、あなたは GCCを使用しています。私はそこにあると思われる GCCはそれを受け入れるようにするコマンドラインオプションかもしれない - それについては を見て(私自身はGCCに精通していない)。 - Igor Tandetnik


reinterpret_castは - E4z9

そして、最終的なコードです:

nRet = RasDial(NULL, NULL, lpRasDialParams, 0,reinterpret_cast<void*>(&RasDialFunc) , &hRasConn);