目前遇到一个dll问题,请大侠们帮忙解决:
我做了一个dll(暂且叫a.dll),但是在这个dll(a.dll)中我使用了另外一个可移植的dll(b.dll)库,
当我编译通过以后,我的应用程序(c.exe)调用a.dll使用的是动态调用方式(LoadLibrary以及GetProcAddress),这是我使用LoadLibrary不能成功,返回的是0x000003e6(内存分配访问无效)。
当我在a.dll中去掉所有与b.dll有关的函数调用后,编译通过以后,我的应用程序(c.exe)就能使用LoadLibrary加载dll成功。为什么,是不是我调用dll的方式不对啊?请大侠们指点迷津啊!

解决方案 »

  1.   

    你把b.dll放到和a.dll同一个目录下看看行不行。
      

  2.   

    DLL中导出函数的调用约定是否正确?
      

  3.   

    b.dll的路径是否正确
    导出函数的调用约定是否一致
      

  4.   

    先用GetLastError看看是什么错误,为什么会返回哪个东西
      

  5.   

    根据你的情况a.dll应该是隐式调用b.dll的。
    a.dll和b.dll是否在一起?或者a.dll调用b.dll本身就有问题
      

  6.   

    是否是b.dll有问题,因为你第一次加载a.dll时,也就是用LoadLibrary()的时候,b.dll也就加载进去了,这时b.dll会自动调用它自身的DllMain()函数的,如果此函数返回了FALSE,则加载会失败。
    至于返回的是0x000003e6,b.dll的DllMain()里面可以人为设定这个值的。系统提供了一个SetLastError()函数。
      

  7.   

    b.dll的路径是否正确
    导出函数的调用约定是否一致