CSDN上的朋友发的鼠标抓词源码的DLL实现中我把宏调用改为函数调用后出现问题.
CSDN上的朋友发的鼠标抓词源码的DLL实现中我把宏调用改为函数调用后出现问题.
//函数方法:
static HANDLE g_hMapFile = NULL;
void GetShareMem(PTShareData pMem)
{
g_hMapFile = OpenFileMapping(FILE_MAP_WRITE , FALSE , MAPFILENAME);
if(g_hMapFile == NULL) pMem = NULL;
else
pMem = (PTShareData)MapViewOfFile(g_hMapFile, FILE_MAP_WRITE, 0, 0,SHMEMSIZE);
return;
}
//宏方法:
#define GetShareMem(lpMem) {\
hMapFile = OpenFileMapping(FILE_MAP_WRITE , FALSE , MAPFILENAME); \
if ( hMapFile == NULL){ \
Say("Can not open file mapping!"); \
lpMem = NULL ; \
}else{ \
lpMem = (PTShareData)MapViewOfFile(hMapFile , FILE_MAP_WRITE , 0, 0 ,SHMEMSIZE); \
if ( lpMem==NULL){\
Say("Failed to get share memory !");\
}\
}\
}
//调用
HANDLE hMapFile = NULL; //宏调用时用到
GetShareMem(pData);
if ( pData==NULL) return FALSE;
PTShareData为自定义结构指针类型
对应的还有FreeShareMem(lpMem) 和void FreeShareMem(PTShareData pMem)
hMapFile用于两个宏的替换,其他地方没有用到.
如果函数调用则相应参数为g_hMapFile,其他地方没开始用.
但调试结果宏可行,而函数不行(pData总是NULL,跟踪到GetShareMem(pMem)中,pMem非零,返回后pData为0!)
各位大虾,见过这种情况吗?