#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif#define  size  20
#define  Arinc429_BaseAddr 0x200void CALLBACK OnReadHDGData(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2) 
{
CHDGDlg* pDlg = (CHDGDlg*)dwUser;   
if (pDlg == NULL || !pDlg->IsKindOf(RUNTIME_CLASS(CDialog)))
return; if(uID == pDlg->m_SndTimer)
{
pDlg->OnRdHDGData();
return;
}
}CHDGDlg::CHDGDlg(CWnd* pParent /*=NULL*/)
: CDialog(CHDGDlg::IDD, pParent)
{
    m_SndTimer = 0;
    m_HdgMsg = _T("");
}void CHDGDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CHDGDlg)
DDX_Text(pDX, IDC_HDGMSG, m_HdgMsg);
//}}AFX_DATA_MAP
}BEGIN_MESSAGE_MAP(CHDGDlg, CDialog)
//{{AFX_MSG_MAP(CHDGDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()BOOL CHDGDlg::OnInitDialog() 
{
CDialog::OnInitDialog();

CenterWindow();
GetDlgItem(IDC_HDGMSG)->SetWindowText(m_HdgMsg);
    m_SndTimer = timeSetEvent(500,0,OnReadHDGData,(DWORD)this,TIME_PERIODIC);

return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}void CHDGDlg::OnRdHDGData()
{   
CString str;
    UINT DataField;
UINT AriRxLabel;
    float HDGfloat=0.0;
    int  AriDataArray[size];
    
Arinc429_RX(Arinc429_BaseAddr, AriDataArray);
for(int i = 0 ; i < size; i++)
    {  
   AriRxLabel = AriDataArray[i] & 0x000000FF;
   switch(AriRxLabel)
   {
  case 0x82:     // 101  HDG
        if((AriDataArray[i]>>29)&0x3 == 3)
{
       if((AriDataArray[i]>>28)&0x01 == 1)
   {      
  
   DataField = (AriDataArray[i] >> 16) & 0xfff;
                   HDGfloat = float (180/pow(2,12) *(DataField - pow(2,12)) + 360.0);
   str.Format("%.1f",HDGfloat);
   }
   else 
   {    
                DataField = (AriDataArray[i] >> 16) & 0xfff;
                   HDGfloat = float(180/pow(2,12) * DataField);
                   str.Format("%.1f",HDGfloat);
   }
}
          break;
      default:
    break;
   }
   GetDlgItem(IDC_HDGVAL)->SetWindowText(str);
 }
} void CHDGDlg::OnOK() 
{
// if(m_SndTimer)
      timeKillEvent(m_SndTimer);
   
CDialog::OnOK();
}void CHDGDlg::OnCancel() 
{
//  if(m_SndTimer)
  timeKillEvent(m_SndTimer);
   
  CDialog::OnCancel();
}
这个代码老是内存出错,把GetDlgItem(IDC_HDGVAL)->SetWindowText(str)注销掉问题就没有了。不知道怎么解决?