问题一:我在一个线程内打开串口(打开串口程序我写成了dll,函数名为opencomm),为什么在调用opencomm之后必须要有AfxMessageBox("***")才能正常打开,否则不行?
问题二:我在一个dlg的OnInitDialog中打开了一个数据库(Access database),在dlg上有一个button,buttonClick中弹出CFileDialog对话框选择一个文件打开之并输出结果到一个EditBox中,dlg的OnClose关闭数据库,问题是只要执行了buttonClick弹出CFileDialog对话框,那么再次进入该dlg中,数据库一定打不开,不执行buttonClick则可以,buttonClick中不弹出CFileDialog对话框也一切正常,buttonClick代码大体如下:
CFileDialog fileDlg ( TRUE ,
".*",
NULL,
NULL,
"所有文件(*.*)|*.*||"
);
if( fileDlg.DoModal() == IDOK )
{
              ...
              ...
              ...
          } 
 请问这是为什么?

解决方案 »

  1.   

    if( fileDlg.DoModal() == IDOK )
    {
                  ...
                  ...
                  ...
              }
    在里面一定要UpdateData(FALSE);
      

  2.   

    是不是CFileDialog这个东东搞乱了资源啊?谁有类似CFileDialog的类啊,给300分
      

  3.   

    问题二: CFileDialog改变了程序的当前路径。
    解决办法: 1. 在弹出CFileDialog以前先调用GetCurrentDirectory()(好久没用了,好像是这个函数)保存当前路径,使用完CFileDialog后,你要调用SetCurrentDirectory()恢复当前路径。
              2. 把access数据文件的路径设为绝对路径问题一: 你是用什么方式打开的串口。请写的详细一些。
      

  4.   

    第一个问题我遇到类似情况,试试采用“使用MFC静态编译库”
      

  5.   

    多谢mmns() 和zx_sanjin(1.5kg) ,我现在去吃饭,下午看看,我觉得你们说的应该是问题的解决办法
      

  6.   

    问题二mmns()已解决,结贴时给分
      

  7.   

    mmns():问题一的dll一定没有问题,因为我用它很多次了,我现在怀疑是线程问题引起的,但是也不应该啊?我只有一个线程调用串口资源,想想看会是什么原因呢?
      

  8.   

    quengzi(code) ,你说的应该有道理,我检查很多次了,好像没有,再看看,多谢
      

  9.   

    我是在opencomm之后才AfxMessageBox的呀,和内存溢出有关系吗?
      

  10.   

    你在调用串口函数后调一下Sleep(1000)试试,我估计和afxMessageBox等了几秒有关。
      

  11.   

    我有次也遇到过,最后好象还是代码写得有问题!
    你加上AFX_MANAGE_STATE(AfxGetStaticModuleState());试试
      

  12.   

    还没有解决?
    应该是线程中调用了malloc或者类似的函数,然后释放内存,但是多线程如此调用往往使用不当会产生意想不到的错误。跟踪调试的时候不会报错,编译之后其他程序调用产生错误,如果用messagebox之类的用户交互的窗体产生一个延迟(或者sleep一段时间)同样不会报错。
    如果是这个问题,你将messagebox替换城sleep,看看有什么效果?
    今天下午关注
      

  13.   

    第二个问题
    用OFN_NOCHANGEDIR 标志打开CFileDialog就不会修改当前路径,没必要去Get\Set。
      

  14.   

    第二个问题
    用OFN_NOCHANGEDIR 标志打开CFileDialog就不会修改当前路径,没必要去Get\Set。
      

  15.   

    楼主呢?快点现身!
    难道你也sleep了:)
      

  16.   

    看来Sleep对楼主是有效果的,呵呵
      

  17.   

    可能是在主线程结束时,副线程还没有开始吧?用Sleep看看!
      

  18.   

    SoLike(是我) , 牛·又学到一招!
      

  19.   

    对不住各位,好久没有来这里了,是串口本身问题,我copy程序到另一台机器上就没事了,多协诸位