调用参数太少
Too few arguments for call
所以基本上在其他编译器(visual studio 2003-2012)中这是可以的,但在 visual studio 2013 中就不行了。有什么问题吗?错误就在我的注释行。
"theParameters" 声明为:
#define theClass CDPClient
#define theParameters CAr & ar, DPID dpidUser, LPVOID lpBuffer, u_long uBufSize
void CDPClient::UserMessageHandler( LPDPMSG_GENERIC lpMsg, DWORD dwMsgSize, DPID idFrom )
{
m_pDump = (BYTE*)lpMsg;
m_nDumpSize = dwMsgSize;
BYTE* pData = (BYTE*)lpMsg;
for (DWORD i=0;i<dwMsgSize;i++)
{
pData[i] = pData[i] ^ ((BYTE)(i & 0xff) ^ 169);
pData[i] = pData[i] ^ ((0xff - (BYTE)(i & 0xff)) ^ 86);
}
CAr ar((LPBYTE)lpMsg, dwMsgSize);
GETTYPE( ar );
void ( theClass::*pfn )( theParameters ) = GetHandler( dw );
if (pfn) {
(this->*(pfn))(ar); // (ar) -> too few arguments for call. Why?
}
else{
//g_DPCacheSrvr.Send( lpBuf, uBufSize, dpidUser );
}
m_pDump = NULL;
m_nDumpSize = 0;
}
您有一个被 4 个参数替换的宏 theParameters
。因此调用需要 4 个参数,但您只提供一个 ar
.
您可以阅读有关宏的更多信息 here。标识符只是被定义的任何东西所取代。所以在你的代码中,
void ( theClass::*pfn )( theParameters ) = GetHandler( dw );
变成
void ( theClass::*pfn )( CAr & ar, DPID dpidUser, LPVOID lpBuffer, u_long uBufSize ) = GetHandler( dw );
所以基本上在其他编译器(visual studio 2003-2012)中这是可以的,但在 visual studio 2013 中就不行了。有什么问题吗?错误就在我的注释行。
"theParameters" 声明为:
#define theClass CDPClient
#define theParameters CAr & ar, DPID dpidUser, LPVOID lpBuffer, u_long uBufSize
void CDPClient::UserMessageHandler( LPDPMSG_GENERIC lpMsg, DWORD dwMsgSize, DPID idFrom )
{
m_pDump = (BYTE*)lpMsg;
m_nDumpSize = dwMsgSize;
BYTE* pData = (BYTE*)lpMsg;
for (DWORD i=0;i<dwMsgSize;i++)
{
pData[i] = pData[i] ^ ((BYTE)(i & 0xff) ^ 169);
pData[i] = pData[i] ^ ((0xff - (BYTE)(i & 0xff)) ^ 86);
}
CAr ar((LPBYTE)lpMsg, dwMsgSize);
GETTYPE( ar );
void ( theClass::*pfn )( theParameters ) = GetHandler( dw );
if (pfn) {
(this->*(pfn))(ar); // (ar) -> too few arguments for call. Why?
}
else{
//g_DPCacheSrvr.Send( lpBuf, uBufSize, dpidUser );
}
m_pDump = NULL;
m_nDumpSize = 0;
}
您有一个被 4 个参数替换的宏 theParameters
。因此调用需要 4 个参数,但您只提供一个 ar
.
您可以阅读有关宏的更多信息 here。标识符只是被定义的任何东西所取代。所以在你的代码中,
void ( theClass::*pfn )( theParameters ) = GetHandler( dw );
变成
void ( theClass::*pfn )( CAr & ar, DPID dpidUser, LPVOID lpBuffer, u_long uBufSize ) = GetHandler( dw );