Go to the documentation of this file.00001 #include "moduleLoaderDLL.h"
00002 #include <assert.h>
00003
00004 ModuleLoaderDLL::ModuleLoaderDLL()
00005 {
00006
00007 }
00008
00009 ModuleLoaderDLL::~ModuleLoaderDLL()
00010 {
00011
00012
00013 }
00014
00015 bool startsWith(const std::string & str, const std::string substr)
00016 {
00017 return (str.find(substr) == 0);
00018 }
00019
00020 bool endsWith(const std::string & str, const std::string substr)
00021 {
00022 size_t pos = str.rfind(substr);
00023 if(pos == std::string::npos)
00024 return false;
00025
00026 size_t len = str.length();
00027 size_t elen = substr.length();
00028
00029 if( pos + elen == len ) {
00030 return true;
00031 }
00032
00033
00034 return false;
00035 }
00036
00041 string ModuleLoaderDLL::soToDll(const string & libname)
00042 {
00043 if(!endsWith(libname, ".so"))
00044 return libname;
00045
00046 string res = libname.substr(0, libname.length() - 2);
00047 res += "dll";
00048 if(startsWith(res, "lib")) {
00049 res = res.substr(3);
00050 }
00051
00052 return res;
00053 }
00054
00055 void* ModuleLoaderDLL::getFunction(string fnString)
00056 {
00057 string libName = extractLibName(fnString);
00058 libName = soToDll(libName);
00059 if(libName.empty())
00060 return NULL;
00061 void* libHandle = NULL;
00062 if(_openLibs.find(libName) != _openLibs.end()) {
00063 libHandle = _openLibs[libName];
00064 } else {
00065
00066 assert(false);
00067 _openLibs[libName] = libHandle;
00068 }
00069
00070 string fnName = extractFunctionName(fnString);
00071 if(fnName.empty())
00072 return NULL;
00073
00074
00075 assert(false);
00076
00077 return NULL;
00078 }
00079