native_library_win.cc revision 4a5e2dc747d50c653511c68ccb2cfbfb740bd5a7
1// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/native_library.h" 6 7#include <windows.h> 8 9#include "base/file_util.h" 10#include "base/thread_restrictions.h" 11#include "base/utf_string_conversions.h" 12 13namespace base { 14 15// static 16NativeLibrary LoadNativeLibrary(const FilePath& library_path) { 17 // LoadLibrary() opens the file off disk. 18 base::ThreadRestrictions::AssertIOAllowed(); 19 20 // Switch the current directory to the library directory as the library 21 // may have dependencies on DLLs in this directory. 22 bool restore_directory = false; 23 FilePath current_directory; 24 if (file_util::GetCurrentDirectory(¤t_directory)) { 25 FilePath plugin_path = library_path.DirName(); 26 if (!plugin_path.empty()) { 27 file_util::SetCurrentDirectory(plugin_path); 28 restore_directory = true; 29 } 30 } 31 32 HMODULE module = LoadLibrary(library_path.value().c_str()); 33 if (restore_directory) 34 file_util::SetCurrentDirectory(current_directory); 35 36 return module; 37} 38 39// static 40void UnloadNativeLibrary(NativeLibrary library) { 41 FreeLibrary(library); 42} 43 44// static 45void* GetFunctionPointerFromNativeLibrary(NativeLibrary library, 46 const char* name) { 47 return GetProcAddress(library, name); 48} 49 50// static 51string16 GetNativeLibraryName(const string16& name) { 52 return name + ASCIIToUTF16(".dll"); 53} 54 55} // namespace base 56