CAcDcView *ms;
SetTimer(1,1000,TimeProc);
writeData是CAcDcView 的成员函数
void PASCAL CAcDcView::TimeProc(HWND hWnd, UINT nMsg, UINT nTimerID, DWORD dwTime)
{
  me->WriteData();
}可是当程序执行到  me->WriteData();就会提示非法操作.这是什么原因

解决方案 »

  1.   

    加上if(nTimerID == 1)
    {
        me->WriteData();
    }
      

  2.   

    怀疑是函数声明不对。查看msdn关于SetTimer的第三个参数要求的回调函数原型,应该是个stdcall(WINAPI)方式的全局函数,照这个样子写TimeProc试试
      

  3.   

    你的程序能编译通过吗?
    好像TimerProc不能是类成员。
    另外,你说的"me"和"ms"是一回事吗?
    如果TimerProc和me都是CAcDcView的成员函数,为什么还要用me->WriteData这种形式来引用呢?把me->去掉不是一样的吗?
    诸多疑问,请予解答。
      

  4.   

    我的程序已经测试通过了,部分如下所示:
    WriteData1()
    {
    return 0;
    }VOID CALLBACK EXPORT TimerProc1(HWND hWnd,UINT nMsg,UINT nIDEvent,DWORD dwTime)
    {
    WriteData1();
    }void CMainFrame::On1() 
    {
    SetTimer(1,100,TimerProc1);
    }
      

  5.   

    不好意思!ms应为me.
    static void WINAPI TimeProc(HWND hWnd,UINT nMsg,UINT nTimerID,DWORD dwTime);
    编译的时候没什么问题,运行时就提示非法操作,我怀疑是无法调用  me->WriteData();
    to seeclear(看得清楚) ,你的VOID CALLBACK EXPORT TimerProc1(HWND hWnd,UINT nMsg,UINT nIDEvent,DWORD dwTime)怎么调用类的成员函数?
    我把改为
    VOID CALLBACK EXPORT TimerProc(HWND hWnd,UINT nMsg,UINT nIDEvent,DWORD dwTime)
    {
    me->WriteData();
    }还是提示非法操作
      

  6.   

    多半是因为me是一个无效的指针。
    在me->WriteData();处设置断点
    检查一下me有没有指向一个Object
      

  7.   

    ms 还没有初始化CAcDcView *ms = new CAcDcView;
      

  8.   

    我的me是没有指向一个Object
    我用拉CAcDcView *ms = new CAcDcView;还是不行,我是在VOID CALLBACK EXPORT TimerProc(HWND hWnd,UINT nMsg,UINT nIDEvent,DWORD dwTime)
    {
    CAcDcView *ms = new CAcDcView
    me->WriteData();
    }