在做一个拨号软件,我想异步调用拨号函数,就是
RasDial(NULL,NULL,&rdParams,0L, (LPVOID)RasDialFunc,&hRasConn);
在程序中我也这样声明回调函数RasDialFunc,把它声明为全局变量;
VOID WINAPI RasDialFunc(UINT unMsg, RASCONNSTATE rasconnstate, DWORD dwError);
{
if (unMsg != WM_RASDIALEVENT) TRACE("Strange event!\n");
//这里我想实现的是对拨号过程中的rasconnstate实时的显示出来(我的工程是基于对话框的),类似于
switch(rasconnstate)
{
case RASCS_OpenPort:
                 //  this->m_dialstatus.AddString("正在打开端口......"); break;将此信息显示对话框中,可是在这个函数里,对话框的变量并不能使用,怎么回事??????????
         case RASCS_PortOpened:
        //  this->m_dialstatus.AddString("端口已打开!"); break;
         ......
}
}
诸位谁用过这个函数的,麻烦告诉小弟,好吗?谢谢了,只有这么多分了。

解决方案 »

  1.   

    对话框的变量当然不能使用,你的RasDialFunc是全局的回调函数。加个对话框的全局指针吧:
    CDialog *pdlg;
    需要在对话框对它赋值。以后在RasDialFunc内就用pdlg->m_dialstatus.AddString调用。
      

  2.   

    谢谢,再问一个问题,在我按照你说的,声明了一个对话框的全局指针,可是在执行到switch(rasconnstate)时出现错误,应用程序错误:“0x004b6d05”zhi指令引用的“0x00000080”内存。该内存不能为“read”。请问这时怎么回事啊???
      

  3.   

    CDialog *pdlg;;有没有对pdlg 分配空间 ?
      

  4.   

    在哪里对它分配空间?它既然是全局的,不知道在哪里分配啊?CDialog *pdlg=new CDialog;
      

  5.   

    如果是单独的对话框:
    this替换为
    AfxGetMainWnd()然后强制转换
      

  6.   

    CYourDialog *pDlg = (CYourDialog *)AfxGetMainWnd();
    switch(rasconnstate)
    {
    case RASCS_OpenPort:
                     //pDlg ->m_dialstatus.AddString("正在打开端口......");          
    }