windows及linux下加载动态库方法

windows及linux下加载动态库方法

Windows 下加载.dll动态库
  • 使用方法

    #ifdef UNICODE
    #define LoadLibraryEx  LoadLibraryExW
    #else
    #define LoadLibraryEx  LoadLibraryExA
    #endif // !UNICODE
    
    //可以看到,根据编码的格式的不同,调用的方法也不同 非unicode 为 LoadLibraryExA
    
    //下面是使用
    
    //pszfile : .dll文件路径
    // LOAD_WITH_ALTERED_SEARCH_PATH : 如果使用此值,则在应用程序的安装目录中搜索DLL及其依赖项。不搜索标准搜索路径中的目录。该值不能与LOAD_WITH_ALTERED_SEARCH_PATH结合使用 。
    HMODULE handle=LoadLibraryEx(pszfile,NULL,LOAD_WITH_ALTERED_SEARCH_PATH);
    
    //handle : 打开的句柄
    //name : 函数名
    //fnc : 获取的函数指针
    void *fnc=GetProcAddress(handle,name);
    
    //释放句柄
    FreeLibrary(handle);
    
  • LoadLibraryExA 函数原型 微软API链接

    HMODULE LoadLibraryExA(
      LPCSTR lpLibFileName,
      HANDLE hFile,
      DWORD  dwFlags
    );
    
Linux 下加载.so动态库
  • 使用方法

    
    //头文件 : #include <dlfcn.h>
    
    //pszfile : 路径
    //handle : 句柄
    void *handle = dlopen(pszfile, RTLD_NOW);
    
    //handle : 句柄
    //fnc :函数指针
    //name : 函数名
    void *fnc = dlsym(handle,name);
    
    //释放句柄
    dlclose(handle);
    
posted @ 2021-05-12 17:23  做个奇怪的人  阅读(584)  评论(0编辑  收藏  举报