一个非常搞笑的操作,dll里面导致死循环,当然这是猜测。
分析下dll里面做了什么事。

解决方案 »

  1.   

    很简单的操作
    BOOL COnvifDemoDlg::OnInitDialog()
    {
    ...................
    // TODO: 在此添加额外的初始化代码
    ONVIFNET_Init(NULL, 0);
    }
    只要,链上该库就会死住,进不了程序入口。
    DLL中就初始化而已:
    //初始化环境
    BOOL ONVIFNET_Init(fONVIFDisConnect cbDisConnect, DWORD dwUser)
    {
    bool ret = false;
    init_comm_param param;
    param.high_press = false;
    param.thread_num = 1; ret = init_comm(&param);
    if ( !ret )
    {
    OutputDebugStringA("init_comm failed!\n");
    return FALSE;
    } ret = sdk_sys::instance()->init(32);
    if ( !ret )
    {
    OutputDebugStringA("sdk_sys::instance()->init failed!\n"); sdk_sys::instance()->uninit();
    sdk_sys::uninstance();
    uninit_comm(); return FALSE;
    } //if (cbDisConnect)
    //{
    // //sdk_sys::instance()->setDisCallback(cbDisConnect, dwUser);
    //} return TRUE;
    }
      

  2.   


    这个原因,可能性最大,因为第三方库太多了,况且不是我编译的,问题可能就出在这里;只是困惑为什么lib方式就不存在这个问题呢?
      

  3.   

    dllmain中不能做任何加载其他dll的动作,例如WSAStartup、CoInitialize等都是不允许的。你的initcomm不知道是干的什么,可能是类似的事情,这回导致严重问题
      

  4.   


    这也是别人的库,我只是调用,应该是初始化网络通信库~~~~~~~~,按理说dllmain应该在我调ONVIFNET_Init之前就完成了的,还是有可能是静态变量什么的初始化失败造成死锁~~~~~~
      

  5.   


    这也是别人的库,我只是调用,应该是初始化网络通信库~~~~~~~~,按理说dllmain应该在我调ONVIFNET_Init之前就完成了的,还是有可能是静态变量什么的初始化失败造成死锁~~~~~~排查原因的时候可以用注代码的方式,逐步定位出问题的地方