C 共享对象和dll中的函数指针查找

C 共享对象和dll中的函数指针查找,c,dll,shared-objects,C,Dll,Shared Objects,基本上,我希望以独立于平台的方式在共享对象中查找函数: 我不想处理LoadLibrary/GetProcAddress或dlopen详细信息 是否有一个库隐藏了在各种操作系统上的共享对象中查找函数指针的过程?我只想提供共享对象/dll名称和函数名称,并获取调用该函数的C函数指针。没有库,因为使用dlsym或GetProcAddress非常简单,不值得在单独的库中进行分解。但它是许多图书馆的一部分 以下是来自FOX GUI工具包的快速复制和粘贴: void* fxdllOpen(const FXc

基本上,我希望以独立于平台的方式在共享对象中查找函数: 我不想处理LoadLibrary/GetProcAddress或dlopen详细信息


是否有一个库隐藏了在各种操作系统上的共享对象中查找函数指针的过程?我只想提供共享对象/dll名称和函数名称,并获取调用该函数的C函数指针。

没有库,因为使用dlsym或GetProcAddress非常简单,不值得在单独的库中进行分解。但它是许多图书馆的一部分

以下是来自FOX GUI工具包的快速复制和粘贴:

void* fxdllOpen(const FXchar *dllname){
  if(dllname){
#ifndef WIN32
#ifdef HAVE_SHL_LOAD    // HP-UX
    return shl_load(dllname,BIND_IMMEDIATE|BIND_NONFATAL|DYNAMIC_PATH,0L);
#else
#ifdef DL_LAZY      // OpenBSD
    return dlopen(dllname,DL_LAZY);
#else           // POSIX
    return dlopen(dllname,RTLD_NOW|RTLD_GLOBAL);
#endif
#endif
#else                   // WIN32
    return LoadLibraryExA(dllname,NULL,LOAD_WITH_ALTERED_SEARCH_PATH);
#endif
    }
  return NULL;
  }


void fxdllClose(void* dllhandle){
  if(dllhandle){
#ifndef WIN32
#ifdef HAVE_SHL_LOAD    // HP-UX
    shl_unload((shl_t)dllhandle);
#else           // POSIX
    dlclose(dllhandle);
#endif
#else                   // WIN32
    FreeLibrary((HMODULE)dllhandle);
#endif
    }
  }


void* fxdllSymbol(void* dllhandle,const FXchar* dllsymbol){
  if(dllhandle && dllsymbol){
#ifndef WIN32
#ifdef HAVE_SHL_LOAD    // HP-UX
    void* address=NULL;
    if(shl_findsym((shl_t*)&dllhandle,dllsymbol,TYPE_UNDEFINED,&address)==0) return address;
#else           // POSIX
    return dlsym(dllhandle,dllsymbol);
#endif
#else                   // WIN32
    return (void*)GetProcAddress((HMODULE)dllhandle,dllsymbol);
#endif
    }
  return NULL;
  }

看看它是如何在boost,
interprocess/detail/os\u file\u functions.hpp
中完成的。这里没有魔法,需要
#ifdef