bool CLibrary::Load(LPCTSTR fileName) { // MessageBox(0, fileName, TEXT("Load"), 0); // Sleep(5000); // OutputDebugString(fileName); // OutputDebugString(TEXT("\n")); return LoadOperations(::LoadLibrary(fileName)); }
UnaryOperationList::UnaryOperationList(void) { operations = new List(MAX_OPERATION_NAME_LENGHT + 1); LoadOperations(); }
bool CLibrary::Load(LPCWSTR fileName) { if (g_IsNT) return LoadOperations(::LoadLibraryW(fileName)); return Load(GetSysPath(fileName)); }
bool CLibrary::LoadEx(LPCWSTR fileName, DWORD flags) { if (g_IsNT) return LoadOperations(::LoadLibraryExW(fileName, NULL, flags)); return LoadEx(GetSysPath(fileName), flags); }
bool CLibrary::LoadEx(LPCTSTR fileName, DWORD flags) { // MessageBox(0, fileName, TEXT("LoadEx"), 0); return LoadOperations(::LoadLibraryEx(fileName, NULL, flags)); }
bool CLibrary::Load(LPCTSTR lpLibFileName) { void *handler = 0; char name[MAX_PATHNAME_LEN+1]; #ifdef _UNICODE AString name2 = UnicodeStringToMultiByte(lpLibFileName); strcpy(name,nameWindowToUnix((const char *)name2)); #else strcpy(name,nameWindowToUnix(lpLibFileName)); #endif // replace ".dll" with ".so" size_t len = strlen(name); if ((len >=4) && (strcmp(name+len-4,".dll") == 0)) { strcpy(name+len-4,".so"); } TRACEN((printf("CLibrary::Load(%s) => %s\n",lpLibFileName,name))) #ifdef __APPLE_CC__ NSObjectFileImage image; NSObjectFileImageReturnCode nsret; nsret = NSCreateObjectFileImageFromFile (name, &image); if (nsret == NSObjectFileImageSuccess) { TRACEN((printf("NSCreateObjectFileImageFromFile(%s) : OK\n",name))) handler = (HMODULE)NSLinkModule(image,lpLibFileName,NSLINKMODULE_OPTION_RETURN_ON_ERROR | NSLINKMODULE_OPTION_PRIVATE | NSLINKMODULE_OPTION_BINDNOW); } else { TRACEN((printf("NSCreateObjectFileImageFromFile(%s) : ERROR\n",name))) } #elif ENV_BEOS // normalize path (remove things like "./", "..", etc..), otherwise it won't work BPath p(name, NULL, true); status_t err = B_OK; image_id image = load_add_on(p.Path()); TRACEN((printf("load_add_on(%s)=%d\n",p.Path(),(int)image))) if (image < 0) { err = (image_id)handler; handler = 0; } else { err = 0; handler = (HMODULE)image; } #else int options_dlopen = 0; #ifdef RTLD_LOCAL options_dlopen |= RTLD_LOCAL; #endif #ifdef RTLD_NOW options_dlopen |= RTLD_NOW; #endif #ifdef RTLD_GROUP #if ! (defined(hpux) || defined(__hpux)) options_dlopen |= RTLD_GROUP; // mainly for solaris but not for HPUX #endif #endif TRACEN((printf("CLibrary::Load - dlopen(%s,0x%d)\n",name,options_dlopen))) handler = dlopen(name,options_dlopen); #endif // __APPLE_CC__ TRACEN((printf("CLibrary::Load(%s) => %p\n",name,handler))) if (handler) { // Call DllMain() like in Windows : useless now // Propagate the value of global_use_utf16_conversion into the plugins int *tmp = (int *)local_GetProcAddress(handler,"global_use_utf16_conversion"); if (tmp) *tmp = global_use_utf16_conversion; tmp = (int *)local_GetProcAddress(handler,"global_use_lstat"); if (tmp) *tmp = global_use_lstat; // test construtors calls void (*fctTest)(void) = (void (*)(void))local_GetProcAddress(handler,"sync_TestConstructor"); if (fctTest) fctTest(); } else { #ifdef __APPLE_CC__ NSLinkEditErrors c; int num_err; const char *file,*err; NSLinkEditError(&c,&num_err,&file,&err); printf("Can't load '%s' (%s)\n", lpLibFileName,err); #elif ENV_BEOS printf("Can't load '%s' (%s)\n", lpLibFileName,strerror(err)); #else printf("Can't load '%s' (%s)\n", lpLibFileName,dlerror()); #endif } return LoadOperations(handler); }