我在调用dll时遇到一些问题,我的部分代码如下:
       typedef int (*UsrFun)(DXCHAN *pState,int nChan);
UsrFun pUsrFun,pUsrFunPara;
hinstDLL = LoadLibrary((LPCTSTR) "CUserFunInt.dll"); 
    pUsrFun = (UsrFun)GetProcAddress(hinstDLL, “MyFun”); 
          if(pUsrFun==NULL)
return;
         else
    {  
  pUsrFunPara=(UsrFun)GetProcAddress  (hinstDLL,"PutParaFromState");
  if(pUsrFunPara==NULL)
 return;
  else
    pUsrFunPara(pState,pState->m_nChanNo); }
/////////问题来了,程序到这里就返回了,不往下执行了~_~
pUsrFun(pState,pState->m_nChanNo);
  FreeLibrary(hinstDLL);
}这是什么原因,调用dll是不是只能调用一次呢?还是在dll中对返回值有什么要求?请大家指教!

解决方案 »

  1.   

    if(!pUsrFun)
    pUsrFunPara=(UsrFun)GetProcAddress  (hinstDLL,"PutParaFromState");
      if(!pUsrFunPara)
     pUsrFunPara(pState,pState->m_nChanNo);
               else
                        return;
         else
                   return;
    /////////问题来了,程序到这里就返回了,不往下执行了~_~
    pUsrFun(pState,pState->m_nChanNo);
      FreeLibrary(hinstDLL);
    }感觉你代码习惯不太好~~
      

  2.   

    怀疑是不是GetProcAddress失败?嘿,楼上的那位,你的编码习惯也不怎么样嘛,if(!pUsrFun) ?这种习惯不好哦,因为pUsrFun不是布尔变量啊。
      

  3.   

    To RiverShan 
      多谢,我会注意书写规范的:~ —~!!!
      我在GetProcAddress调用时,是能够得到值的,应该是其他地方有问题!!!
      

  4.   

    跟过了,在调用dll的函数里,刚调用一个dll中的函数,就返回了,不能执行后面的函数。
      

  5.   

    会不会是 PutParaFromState函数的问题?
      

  6.   

    littlebob(海波):sorry~我不太清楚那里~
    只是感觉他写得看着不舒服~
    对了~我想起来了~
    LoadLibrary只能调用一次~
    下次调用需要FreeLibrary~
    然后再LoadLibary~我记得是这样~
    不知对不对~
      

  7.   

    我发现问题在dll里,我是在类里定义的函数,然后再把他export出去的,后来我又定义为全局函数,问题好象解决了,这是为什么呀!