aboutsummaryrefslogtreecommitdiff
path: root/src/syscall/dll_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/syscall/dll_windows.go')
-rw-r--r--src/syscall/dll_windows.go14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/syscall/dll_windows.go b/src/syscall/dll_windows.go
index c157e6dd7b..ec8d85b66b 100644
--- a/src/syscall/dll_windows.go
+++ b/src/syscall/dll_windows.go
@@ -5,6 +5,7 @@
package syscall
import (
+ "internal/syscall/windows/sysdll"
"sync"
"sync/atomic"
"unsafe"
@@ -26,6 +27,7 @@ func Syscall9(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 u
func Syscall12(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 uintptr) (r1, r2 uintptr, err Errno)
func Syscall15(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 uintptr) (r1, r2 uintptr, err Errno)
func loadlibrary(filename *uint16) (handle uintptr, err Errno)
+func loadsystemlibrary(filename *uint16) (handle uintptr, err Errno)
func getprocaddress(handle uintptr, procname *uint8) (proc uintptr, err Errno)
// A DLL implements access to a single DLL.
@@ -34,13 +36,19 @@ type DLL struct {
Handle Handle
}
-// LoadDLL loads DLL file into memory.
-func LoadDLL(name string) (dll *DLL, err error) {
+// LoadDLL loads the named DLL file into memory.
+func LoadDLL(name string) (*DLL, error) {
namep, err := UTF16PtrFromString(name)
if err != nil {
return nil, err
}
- h, e := loadlibrary(namep)
+ var h uintptr
+ var e Errno
+ if sysdll.IsSystemDLL[name] {
+ h, e = loadsystemlibrary(namep)
+ } else {
+ h, e = loadlibrary(namep)
+ }
if e != 0 {
return nil, &DLLError{
Err: e,