class SerialClass : public CCmdTarget中使用串口句丙HANDLE m_handle;
在class Connect : public CDialog 中用m_handle进行初始化可以运行
可在class DeltaRMB : public CDialog 中用m_handle进行读写就不能了
这是为什么啊请打虾门解决下!我是个初学的,公司要开发,请大虾门指点时详细指导!555
急急

解决方案 »

  1.   

    在class Connect : public CDialog 中用m_handle进行初始化可以运行 
    ---------
    这个 m_handle  是 Connect 类的类变量?
    class DeltaRMB : public CDialog 中用m_handle进行读写
    ----------
    这个 m_handle 又是什么? DeltaRMB 的类变量吗?  如果是, 
    那当然有问题,这个m_handle根本就不是 Connect 类中的那个已经初始化了的变量.
    你需要 把 Connect 对象的指针传到 DeltaRMB 中保存起来(pConnect), 然后使用 pConnect->m_handle
      

  2.   

    我在class Connect和DeltaRMB 中都是用的是class SerialClass 对象指针m_handle
      

  3.   

    把HANDLE m_handle; 定义到CXXApp类里每次用的时候都这样((CXXApp*)AfxGetApp())->m_handle在哪个类里调用都不会出现问题了
      

  4.   


    大兄,答得不错不过,这就是按接触时,会这样做,曾经也有过,以前更傻的是,还把handle保存到文本中
      

  5.   

    没关闭当然会用到设备的
    不论数据库等都要及时CLOSE不然都会有错误
      

  6.   

    可以用进程之间的互撤,重新打来com
      

  7.   

      你将HANDL m_handle定义成全局变量试一下 在串口通信中 这个应该是要定义成全局的供各个线程共享  在各个线程中设置互斥事件或者临界区来获得各个独立线程访问串口的权限  仅供参考
      

  8.   

      再就是这个线程用完了要记得关闭CloseHandle(m_handle); 你不关闭的话 其它的线程就只能处于一直的等待状态 没法活的使用该串口通信的权限  我感觉你这个问题可能是上面能进行通信的那个线程一直在霸占着这个使用权限 你后一个线程想要使用的话 当然是不可以的
      

  9.   

    兄弟,是不同线程还是不同进程???我猜你是说线程。你可以在项目里把与串口通信的对象设置为全局变量,然后,其他线程里面用extern应用过去。记住一个串口只能是初始化一次,然后CLOSE之后别的线程才能去再次初始化的。如果你想实现同步,那么你必须将 对象(与串口通信的对象,)用临界区 包上,或者用mutex
      

  10.   

    不同进程肯定不能使用同一串口啊,你在A进程打开的com句柄是888,在B进程中怎么可能知道888是什么啊,谁告诉你的可以在不同进程中用同样的句柄啊
      

  11.   

    不错谢谢
    现在我用了一个方法
    把初始化m_handle的值提取出来在另一窗口强行给类m_handle;
    还是能读写了
    在这还是感谢大家对我的帮助!
    希望对同类问题的人也有所帮助!
    谢谢!
    谢幕!
    揭贴!