一个让小弟我想死的有关问题,请眼睛好的帮小弟我看看,有图有真相
一个让我想死的问题,请眼睛好的帮我看看,有图有真相!
我的OpenComMain动态库有俩个函数GetWhiteList:
OpenComMain:
主函数测试代码是这样的:
问题就是getWhite有值,可是Open却又总是0xcccccccc? 明明是一样的!
------解决方案--------------------
典型的内存越界,你看看pResult哪里分配内存了。也就你的编译器版本低没警告。
------解决方案--------------------
lz
不断电 不打log么?
我的OpenComMain动态库有俩个函数GetWhiteList:
extern "C" /*__declspec(dllexport)*/ int APIENTRY
GetWhiteList(int nAddress,int nDevType,int* commmand,char *pResult)
{
CString strMsg="";
BYTE resultData[15];
BYTE commandData[4];
BYTE result=0xFF;
memset(resultData, '\0', sizeof(resultData));
memset(commandData,0,sizeof(commandData));
for(int i=0;i<sizeof(commandData);i++)
{
commandData[i]=commmand[i];
printf("%s",commandData[i]);
}
BYTE type = nDevType==1 ? DEVICE_TYPE_LIFT : DEVICE_TYPE_ISSUER;
result = m_ipsCommand.GetWhiteList(nAddress, type,commandData, resultData);
if (result == 0x00)
{
char buf[1000], tmpbuf[10];
memset(buf, 0, strlen(buf));
for(int i = 0; i<15; i++)
{
memset(tmpbuf, 0, strlen(tmpbuf));
sprintf(tmpbuf, "%02X", resultData[i]);
strcat(buf, tmpbuf);
}
strMsg.Format("%s",buf);
//strMsg=strMsg.Right(47*2)+"00";
//if (strMsg=="") return -1;
strcpy(pResult,strMsg);
//nRecCnt = resultData[2] * 0xFF + resultData[2] + resultData[3];
return 0;
}
else
{
return -1;
}
}
OpenComMain:
//打开串口
extern "C" /*__declspec(dllexport)*/ int APIENTRY
OpenComMain(int nPort)
{
m_ipsCommand.CloseCom();
m_bComOpen = m_ipsCommand.OpenCom(nPort, m_nBaud);
if (!m_bComOpen)
return -1;
m_nPort=nPort;
//AfxMessageBox("打开成功");
return 0;
}
主函数测试代码是这样的:
int main(int argc, char* argv[])
{
typedef int (WINAPI * pOpen ) (int);
HINSTANCE hDll;
pDelay Delay;
pBack Back;
pOpen Open;
PGetWhiteList getWhite;
hDll=LoadLibrary("MainCOMM.dll");
if(hDll)
{
int result=999;
Open=(pOpen)GetProcAddress(hDll,"OpenComMain");
getWhite=(PGetWhiteList)GetProcAddress(hDll,"GetWhiteList");
if(Open)
{
Open(1);
}
if(getWhite)
{
char* pResult;
//int cardNo[]={0,114,104,210};
int cardNo[]={0x00,0x72,0x68,0xD2};
result=getWhite(15,1,cardNo,pResult);
}
}
system("PAUSE");
return 0;
}
问题就是getWhite有值,可是Open却又总是0xcccccccc? 明明是一样的!
------解决方案--------------------
典型的内存越界,你看看pResult哪里分配内存了。也就你的编译器版本低没警告。
------解决方案--------------------
不断电 不打log么?