在看别人的程序时发现的
假定有两个函数A和B
在函数A中new BYTE[]一个数组,之后将这个数组的地址(new之后会产生这个数组的首地址)以参数的形式传递给函数B
在函数A结束时删掉这个动态申请的数组。
在函数A结束之前函数B由于被调用就开始执行
在函数B中可以用这个首地址以数组的方式(下标访问)来访问这块内存
示例如下:
void CALLBACK CBTHDlg::OnSerialRead(void *pOwner, BYTE *buf, DWORD buflen)//----------------------------函数A
{
BYTE *pRecvBuf = NULL;
CBTHDlg *pThis = (CBTHDlg*)pOwner;
pRecvBuf = new BYTE[256];
ZeroMemory(pRecvBuf, 256);
CopyMemory(pRecvBuf, buf, buflen);
pThis->PostMessageW(WM_RECV_SERIAL_DATA, WPARAM(pRecvBuf), buflen);//首地址pRecvBuf以参数的形式传给函数B
delete []pRecvBuf;
pRecvBuf =NULL;
}
LONG CBTHDlg::OnRecvSerialData(WPARAM wParam, LPARAM lParam)//--------------------函数B
{
char *aRecv = (char *)wParam;
CString strRecv = L"";
static CString strRecv1 = L"";
CEdit *pEdtRecv = (CEdit*)GetDlgItem(IDC_EDT_RECV);
CButton* pBtnCheck = (CButton*)GetDlgItem(IDC_CHK_16);
int state = pBtnCheck->GetCheck();
if(state == 0)
{
pEdtRecv->GetWindowTextW(strRecv1);
strRecv = CString(aRecv);
pEdtRecv->SetWindowTextW(strRecv1+strRecv);
}
else
{
int i;
//strRecv = CString(aRecv);
for(i = 0; i<lParam; i++)
{
strRecv.Format(L"%x", aRecv[i]);//函数B中以数组下标的方式来访问这一块内存
pEdtRecv->GetWindowTextW(strRecv1);
pEdtRecv->SetWindowTextW(strRecv1+strRecv);
}
}
delete[] aRecv;
aRecv = NULL;
return 0;
}