从 void(WINAPI*)(..) 到 LPVOID 的强制转换无效
invalid cast from void(WINAPI*)(...) to LPVOID
我正在尝试在QT中使用此代码[RasDialAsync.c](https://github.com/pauldotknopf/WindowsSDK7-Samples/blob/master/netds/ras/rasdialasync/RasDialAsync.c),我只有一个错误无法弄清楚。 这是什么? 我该如何解决这个问题? 这是函数头:
My RasDialFunc 函数 :
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 failedn";
}
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);
^
以下这些评论是我的答案:
从技术上讲,在函数指针和 对象指针。该标准允许它们具有不同的尺寸。为 无论好坏,WinAPI 都需要在许多地方进行这样的转换 (我似乎记得也有一些POSIX函数可以)。 MSVC编译器从未抱怨过这样的转换,但是您正在使用 海湾合作委员会,它似乎想对此迂腐。我怀疑有 可能是一些命令行选项,可以让 GCC 接受它 - 看 为此(我本人不熟悉海湾合作委员会)。– 伊戈尔·坦德特尼克
reinterpret_cast - E4z9
最终代码是:
nRet = RasDial(NULL, NULL, lpRasDialParams, 0,reinterpret_cast<void*>(&RasDialFunc) , &hRasConn);
相关文章:
- 错误:从"int"到枚举c++的转换无效
- 从 'int' 到 'int*' CPP 的转换无效
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- 为什么我收到"从常量指针到指针的转换无效?
- 错误:从"int"到"int*"的转换无效[-允许].我在下面提供了我的代码,我
- 从类指针到 int 的转换无效
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- QTextStream的操作数到二进制的转换无效
- 从类型"void*"到函数指针的强制转换无效
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 模板类实例化中的指针转换无效
- 从"int"到"矢量*"的转换无效
- 从类型"void*"到类member_function指针的强制转换无效
- 在 sprintf 中从 'signed char*' 到 'char*' 的转换无效
- 另一个:从"常量类型*"到"类型*"的转换无效
- constexpr 链表 - 从 const X* 到 X* 的转换无效