【发布时间】:2017-10-25 23:38:01
【问题描述】:
所以基本上在其他编译器(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;
}
【问题讨论】:
-
什么是
theParameters? -
嗨,我已经添加了“theParameters”是什么。
-
theParameters是一个扩展为 4 个参数的宏。您只使用一个参数调用该函数。您缺少dpidUser、lpBuffer和uBufSize参数。 -
请删除宏,使用 nullptr、const 和 size_t。
-
您好,我这样做了“(this->*(pfn))(ar, dpidUser, lpBuffer, uBufSize);"但它认为它没有定义。
标签: c++ visual-c++ visual-studio-2012