GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — DynamicModuleLoader/DynamicModuleLoader.cpp at master · HW140701/DynamicModuleLoader Expand file tree/ Copy pathDynamicModuleLoader.cppMore file actions 146 lines (128 loc) · 2.76 KB / Copy pathDynamicModuleLoader.cppFile metadata and controls146 lines (128 loc) · 2.76 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 #include "DynamicModuleLoader.h" namespace DynamicModuleLoaderSpace { DynamicModuleLoader::DynamicModuleLoader() :m_DynamicModulePtr(NULL), m_ErrorMessage(""), m_DynamicModuleState(DynamicModuleState::DMS_UnLoaded) { } DynamicModuleLoader::~DynamicModuleLoader() { } bool DynamicModuleLoader::IsFileExist(const std::string filePath) { std::fstream file; file.open(filePath, std::ios::in); if (file) { file.close(); return true; } else { return false; } } bool DynamicModuleLoader::LoadDynamicModule(const std::string dynamicModulePath) { if (IsFileExist(dynamicModulePath)) { #ifdef WINDOWS m_DynamicModulePtr = LoadLibrary(dynamicModulePath.c_str()); #elif LINUX m_DynamicModulePtr = dlopen(dynamicModulePath.c_str(), RTLD_NOW | RTLD_GLOBAL); #endif // WINDOWS if (m_DynamicModulePtr != NULL) { m_DynamicModuleState = DynamicModuleState::DMS_Loaded; return true; } else { #ifdef WINDOWS int errorCode = GetLastError(); #endif GetInternalErrorMessge(errorCode); return false; } } return false; } void* DynamicModuleLoader::GetFunction(const std::string functionName) { if (m_DynamicModulePtr) { void* tempFunctionPtr = NULL; #ifdef WINDOWS tempFunctionPtr = GetProcAddress(m_DynamicModulePtr, functionName.c_str()); #elif LINUX tempFunctionPtr = dlsym(m_DynamicModulePtr, functionName.c_str()); #endif // WINDOWS if (tempFunctionPtr != NULL) { return tempFunctionPtr; } else { #ifdef WINDOWS int errorCode = GetLastError(); #endif GetInternalErrorMessge(errorCode); } } return NULL; } bool DynamicModuleLoader::UnloadDynamicModule() { if (m_DynamicModulePtr) { #ifdef WINDOWS if (FreeLibrary(m_DynamicModulePtr) == 0) { int errorCode = GetLastError(); // 得到错误代码 GetInternalErrorMessge(errorCode); return false; } #elif LINUX dlclose(m_DynamicModulePtr); #endif m_DynamicModuleState = DynamicModuleState::DMS_UnLoaded; return true; } return false; } #ifdef WINDOWS #endif void DynamicModuleLoader::GetInternalErrorMessge(int errorCode) { std::string errorMessge = ""; #ifdef WINDOWS LPVOID lpMsgBuf; if (FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL )) { errorMessge = (LPCTSTR)(lpMsgBuf); LocalFree(lpMsgBuf); } #elif LINUX errorMessge = dlerror(); #endif // WINDOWS m_ErrorMessage = errorMessge; } std::string DynamicModuleLoader::GetErrorMessage() { return m_ErrorMessage; } bool DynamicModuleLoader::GetDynamicModuleState() { return (bool)m_DynamicModuleState; } } |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |