我的代码连续调用3个dll,
操作过程,有时正常运行,有时出现死锁,就是不动了.
代码如下:
RTX_addnewuser(add_name,RTX_ip);//创建用户
第一次调用dllQQpwd = etUserPassword->Text;
if(QQpwd!="")
  RTX_updatepwd(add_name,QQpwd,RTX_ip);//创建密码
第二次调用dllRTX_adduser_to_dept(add_name,RTX_begindept,RTX_enddept,RTX_ip);//用户添加到部门
第三次调用dlldll的调用如下......
handledel=LoadLibrary("RTX_deldept.dll");  //获取dll RTX_deldept的句柄
    if(handledel)
    {
      lpFarProcdel = GetProcAddress(handledel,"DelDept"); //通过句柄回去函数DelDept的接口
    }
    try
    {
      if(lpFarProcdel)
      {
        lpdeldept = (void(_cdecl *)(char *,char *))lpFarProcdel; //指针类型转换
        lpdeldept(del_deptname.c_str(),RTX_ip.c_str());//参数1-删除的部门,2-ip
      }
    }
    __finally
    {
      FreeLibrary(handledel);
    }后面有freelibrary了.
请问为什么会偶尔出现死锁.有什么好的方法来解决dll的调用么??

解决方案 »

  1.   

    try和__finally不能搭配在一起吧,应该用__try.你这三个调用是在同一线程里进行的吗?如果是同一线程,就不存在死锁,应该检查dll中函数的实现.
      

  2.   

    调试, 在死锁的时候点暂停, 看callstack,
     找到你代码的地方看在哪死锁了
      

  3.   

    连续调用3个dll.是3个不同的还是3次相同的?
      

  4.   

    DLL死锁比较容易发生在DllMain里面,DllMain里面最好不要执行复杂操作。