SharedLibraryRef dyldSharedLibraryLoader::loadSharedLibrary(const String& filename, const LoggerRef& logger) const { OW_LOG_DEBUG(logger, Format("Load request for %1 received.", filename)); NSObjectFileImage image = 0; NSObjectFileImageReturnCode dsoerr = NSCreateObjectFileImageFromFile(filename.c_str(), &image); const char* err_msg = NULL; NSModule libhandle = NULL; if (dsoerr == NSObjectFileImageSuccess) { libhandle = NSLinkModule(image, filename.c_str(), NSLINKMODULE_OPTION_RETURN_ON_ERROR | NSLINKMODULE_OPTION_PRIVATE); if (!libhandle) { NSLinkEditErrors errors; int errorNumber; const char *fileName; NSLinkEditError(&errors, &errorNumber, &fileName, &err_msg); } NSDestroyObjectFileImage(image); } else if ((dsoerr == NSObjectFileImageFormat || dsoerr == NSObjectFileImageInappropriateFile) && NSAddLibrary(filename.c_str()) == TRUE) { OW_LOG_ERROR(logger, Format("NSCreateObject: %1 failed with error \"%2\"", filename, dsoerr)); // libhandle = (NSModule)DYLD_LIBRARY_HANDLE; } else { err_msg = "cannot create object file image or add library"; OW_LOG_ERROR(logger, Format("NSCreateObject: %1 failed with error %2", filename, dsoerr)); } if (libhandle) { try { return SharedLibraryRef( new dyldSharedLibrary(libhandle, filename)); } catch (...) { NSUnLinkModule(libhandle, FALSE); throw; } } else { OW_LOG_ERROR(logger, Format("dyldSharedLibraryLoader::loadSharedLibrary:" " %1", err_msg)); return SharedLibraryRef( 0 ); } }
SharedLibraryRef DLLSharedLibraryLoader::loadSharedLibrary(const String& filename) const { if( filename.endsWith("libblocxx.dll") ) { return SharedLibraryRef(0); } HINSTANCE libhandle = ::LoadLibrary(filename.c_str()); if (libhandle) { return SharedLibraryRef(new DLLSharedLibrary(libhandle, filename)); } Logger logger(COMPONENT_NAME); BLOCXX_LOG_ERROR(logger, Format("DLLSharedLibraryLoader::loadSharedLibrary " "LoadLibrary returned NULL. Error is: %1", System::lastErrorMsg()).c_str()); return SharedLibraryRef(0); }