我又一个DLL,主函数如下BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
 )
{
         if (DLL_PROCESS_ATTACH==ul_reason_for_call)
{
HandleOfDLL = LoadLibrary(L"Another.dll");
if(!HandleOfDLL)return FALSE;
}
}
问题如下:我用Loadlibrary动态加载没有问题。我用lib导入库,静态加载的时候,在 LoadLibrary(L"Another.dll")时,就出现了异常,类似于内存地址错误。谁能解释一下这个问题?谢谢

解决方案 »

  1.   

    静态加载的时候添加.h文件后,就可以直接调用函数了啊,不需要loadLibrary了。至于静态加载LoadLibrary会不会出错,没验证过。百度一下吧
      

  2.   

    静态调用按下面的步骤就可以了吧?不需要LoadLibrary了.lz是不是2个混淆了?
    1.Add the .lib to the linker
    2.include the .h in the source file
    3.copy the .lib and .dll to the path where the .exe is
      

  3.   

    别人静态加载我的DLL,而我的DLL主函数中又动态加载了另外一个DLL。出错了!
      

  4.   

    这点代码看不出问题吧,静态加载完dll后为什么又loadlibray呢?
      

  5.   

    你把代码DllMain中十有八九出的问题是堆栈溢出!
    你能保证被加载的那个DLL没有再载入这个DLL,如果有,那这两个DLL就一直相互加载下去,直到堆栈爆了。
      

  6.   

    不是不需要,是根本不能
    这样的代码,msdn里面明确说过不可以的
      

  7.   

    楼主这是想干啥?在DLL中再加载一个DLL?
      

  8.   


    LZ 工资设计好牛X呀 本来是link一起了 然后再LINK 一起
      

  9.   

    DLL的调用
    DLL的调用方式有两种:静态调用方式和动态调用方式
    1)静态调用方式
    由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码,简单实用,但不过灵活,只能满足一般要求。
    隐式的调用:需要把产生动态链接库时产生的.lib文件加入到应用程序的工程中,想使用DLL中的函数时,只须说明一下。隐式调用不需要调用
    LoadLibrary()和FreeLibrary()。程序员在建立一个DLL文件时,链接程序会自动生成一个与之对应的LIB导入文件。该文件包含了每一个DLL导出函数的
    符号名和可选的标识号,但是并不含有实际的代码。LIB文件作为DLL的替代文件被编译到应用程序项目中。
    当程序员通过静态链接方式编译生成应用程序时,应用程序中的调用函数与LIB文件中导出符号相匹配,这些符号或标识号进入到生成的EXE文件中。
    LIB文件中也包含了对应的DLL文件名(但不是完全的路径名),链接程序将其存储在EXE文件内部。
    当应用程序运行中需要加载DLL文件时,WINDOWS根据这些信息发现并加载DLL,然后通过符号名或标识名实现对DLL函数的动态链接。所有被应用程序
    调用的DLL文件都会在应用程序EXE文件加载时被加载到内存中。可执行程序链接到一个包含DLL输出函数信息的输入库文件(.lib)。操作系统在加载会用
    可执行文件时加载DLL。可执行程序直接通过函数名调用DLL的输出函数,调用方法和程序内部其他的函数是一样的。
    2)动态调用方式
    是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,使用上较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。
    显式调用:是指在应用程序中用LoadLibrary()或MFC提供的AfxLoadLibrary()显示地将自己所做的动态链接库调进来,动态链接库的文件名即是上面
    两个函数的参数,再用GetProcAddress()获取想要引入的函数。在应用程序退出之前,应用FreeLibrary()或MFC提供的AfxFreeLibrary()释放动态链接库。
      

  10.   

    微软的MSDN上有详细的说明,没有看很懂,但是意思好像是在dllmain中再调用DLL是不安全的!