在时钟中断函数里调一个activeX控件方法, 出现异常MIOGetData() called by thread 4340 but no TLS index allocated下面是调用代码
int CALLBACK Cdemo1Doc::HighTimerCallProc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
CDemoDlg* Ptr = (CDemoDlg*)dwUser;  //控件在CDemoDlg对话框里
Ptr->GetData();//用指针调取数据函数发生异常,GetData()里用了控件的取数据函数,发生异常 return 0;
}怎么解决?

解决方案 »

  1.   

    CDemoDlg* Ptr = (CDemoDlg*)dwUser;  //控件在CDemoDlg对话框里
    if(Ptr)
    {
        Ptr->GetData();//用指针调取数据函数发生异常,GetData()里用了控件的取数据函数,发生异常
    }
      

  2.   

    和Ptr为NULL无关吧。 
    异常实际是发生在GetData()里的m_mcbConnection.GetData 
    m_mcbConnection是控件对象变量。VARIANT vaData;
    try
    {
        sumOfnumber=0;
        int ChannelNumber=8192;
        memset(SpectrumData, 0, ChannelNumber);
        vaData = m_mcbConnection.GetData(0, ChannelNumber);
      

  3.   

    COM组件的全局状态应该是属于它所在线程的TLS。
    你这么用,有可能是在其它线程中调用了COM组件导致了问题吧。
      

  4.   

    线程中可能不能直接访问这个对象等,可以发送消息等方式给CDemoDlg,由它来处理
      

  5.   

    用消息没事吧。
    ATL里不也是都用消息来处理的。延迟不了太多。总比出错强。:)