小弟在动态导入dll时碰到了困难,求高手帮助。我先用Wizard建了一个简单的win32的dll,里面什么函数都没加,然后编译生成dll.然后,在另一个应用程序中用LoadLibrary("dll的绝对路径")来载入这个dll。结果函数调用失败,返回的句柄为0x100000,GetLastError()中返回的是“无效句柄”的错误。后来我又用向导另建了几个dll,结果返回的句柄也是0x100000,但GetLastError()却显示函数调用成功。不知道又谁碰到过同样的问题?

解决方案 »

  1.   

    DLL的首选地址是0x100000,返回这个应该是正确的,
    除非一种情况就是你的这个地址,已经被你的应用程序的其他DLL占用了
      

  2.   

    建立一个 win32 的标准DLL,然后再试试。
    注意这个 win32 标准DLL最好只依赖系统的.dll,总这注意它的依赖性。
      

  3.   

    楼主凭什么确定"函数调用失败", LoadLibrary只在返回0的时候表示失败吧? 0x100000是其HMODULE的值, 有什么问题?
      

  4.   

    我在调用LoadLibrary();后马上调用DWORD iErr = GetLastError();
    结果iErr 值为6(无效句柄)。
    不知道是什么原因。
      

  5.   

    你在LoadLibrary()前加上SetLastError(0);把错误清零
    然后再调用LoadLibrary()
    然后GetLastError
    你的错误可能是LoadLibrary前面引起的
      

  6.   

    晕哦!!
    LoadLibrary()只要路径对了就不会错吧!
    你判断一下返回的是不是NULL
    不然在dll里面写个函数导出,看可以调用不
      

  7.   

    你在LoadLibrary()前加上SetLastError(0);把错误清零
    然后再调用LoadLibrary()
    然后GetLastError
    你的错误可能是LoadLibrary前面引起的
    up!应该是前面影起的!你怎么判断就是LoadLibrary()的error呢?
      

  8.   

    好像还是不行哦。我的代码如下:
    SetLastError(0);
    hinstDll = LoadLibrary("F:\\dd\\hookdll\\Debug\\hookdll.dll");   //返回的值为0x100000
    vv = GetLastError();    //这里返回的是6(无效句柄)
    hkprcSysMsg = (HOOKPROC)GetProcAddress(hinstDll,"MyHOOKPROC");    //MyHookPROC是我在dll中定义的一个函数
    DWORD v = GetLastError();   //这里返回的是127(无效的Proc)有哪位大哥能提供一个正确的LoadLibrary的写法和相应的dll?再加50分相送。
      

  9.   

    首先判断返回句柄是否有效,无效(NULL)再去调用GetLastError(),否则,这个错误并不是这次产生的。
      

  10.   

    楼主可否把DLL的DLLMain帖上来给大家看一下, 如果像你说的那样, 问题可能是DLL本身某处错了.
      

  11.   

    不是问题吧
    LoadLibraryReturn Values
    If the function succeeds, the return value is a handle to the module.
    If the function fails, the return value is NULL.