LPSTR getLastErrorBuffer(int nSize){
if (nSize >= (m_nLastErrorSize-1)){
do
{
m_nLastErrorSize*=2;
if(nSize < m_nLastErrorSize){
break;
}
} while (TRUE);
m_szLastError=(TCHAR*)realloc(m_szLastError,m_nLastErrorSize);
}
ZeroMemory(m_szLastError,m_nLastErrorSize);
return m_szLastError;
}
void setLastError(IN string szMsg)
{
LPSTR lpBuffer=getLastErrorBuffer((int)szMsg.size());
_tcscpy_s(lpBuffer,m_nLastErrorSize,szMsg.c_str());
/*这里调用,由于_stdcall 从右到左压入参数,导致m_nLastErrorSize压入的是先前的值,所以当buffer不足会调用失败
_tcscpy_s(getLastErrorBuffer((int)szMsg.size()),m_nLastErrorSize,szMsg.c_str());
*/
}
_stdcall 调用需要注意的问题
最新推荐文章于 2021-04-15 00:00:24 发布