这是关于正向函数声明的?和struct,我需要解释为什么这些代码可在msvc 2013及以下版本而不在msvc 2015及以上版本上运行
我尝试定义函数参数,例如:
typedef void (*TRANSFERPROC)(LPPACKAGETRANSFER x, DWORD y, DWORD z);
代码为:
typedef void (*TRANSFERPROC)(LPPACKAGETRANSFER, DWORD, DWORD); //Error C2122 in here
typedef struct _PACKAGETRANSFER
{
LPIOSOCKET lpSocket;
LPTIMER lpTimer;
LPIOBUFFER lpIoBuffer;
DWORD dwBuffer;
DWORD dwLastError;
ULONG ulOpenSslError;
LPTRANSFERRATE lpTransferRate;
INT64 i64Total;
DWORD volatile dwTime;
BOOL bNoFree;
BOOL bClosed; // Set to TRUE when a socket indicates it's been closed
BOOL bQuick; // Set to TRUE if SendQuick which implies different overlapped structure
BOOL bTimedOut;
VOID (*lpCallBack)(LPVOID, DWORD, INT64, ULONG);
LPVOID lpContext;
TRANSFERPROC lpContinueProc; // When send/receive to socket completes call this function...
} PACKAGETRANSFER, *LPPACKAGETRANSFER;
// Transmit package API
BOOL TransmitPackage_Init(BOOL bFirstInitialization);
VOID TransmitPackage_DeInit(VOID);
VOID TransmitPackages(LPIOSOCKET lpSocket, LPIOBUFFER lpBuffer, DWORD dwBuffer, VOID (* lpTransferRateCallBack)(LPVOID, DWORD, DWORD, DWORD),
VOID (* lpCallBack)(LPVOID, DWORD, INT64, ULONG), LPVOID lpContext);
VOID TransmitPackage_ReadSocket(LPPACKAGETRANSFER lpTransfer, DWORD dwBytesRead, DWORD dwLastError);
VOID TransmitPackage_WriteSocket(LPPACKAGETRANSFER lpTransfer, DWORD dwBytesRead, DWORD dwLastError);
VOID TransmitPackage_ReadSecureSocket(LPPACKAGETRANSFER lpTransfer, DWORD dwBytesRead, DWORD dwLastError);
VOID TransmitPackage_WriteSecureSocket(LPPACKAGETRANSFER lpTransfer, DWORD dwBytesRead, DWORD dwLastError);
msvc 2015-2019上的编译以错误结束:
..\IoSocket.h(101,62): error C2122: 'DWORD': prototype parameter in name list illegal
英特尔C / C ++编译器2019 U4设法干净地编译了上述代码。