github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/pkg/runtime/syscall_windows.goc (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package syscall 6 #include "runtime.h" 7 #include "os_GOOS.h" 8 #include "cgocall.h" 9 10 func loadlibrary(filename *uint16) (handle uintptr, err uintptr) { 11 WinCall c; 12 13 c.fn = runtime·LoadLibrary; 14 c.n = 1; 15 c.args = &filename; 16 runtime·cgocall(runtime·asmstdcall, &c); 17 handle = c.r1; 18 if(handle == 0) 19 err = c.err; 20 else 21 err = 0; 22 } 23 24 func getprocaddress(handle uintptr, procname *uint8) (proc uintptr, err uintptr) { 25 WinCall c; 26 27 USED(procname); 28 c.fn = runtime·GetProcAddress; 29 c.n = 2; 30 c.args = &handle; 31 runtime·cgocall(runtime·asmstdcall, &c); 32 proc = c.r1; 33 if(proc == 0) 34 err = c.err; 35 else 36 err = 0; 37 } 38 39 func NewCallback(fn Eface) (code uintptr) { 40 code = (uintptr)runtime·compilecallback(fn, true); 41 } 42 43 func NewCallbackCDecl(fn Eface) (code uintptr) { 44 code = (uintptr)runtime·compilecallback(fn, false); 45 } 46 47 func Syscall(fn uintptr, nargs uintptr, a1 uintptr, a2 uintptr, a3 uintptr) (r1 uintptr, r2 uintptr, err uintptr) { 48 WinCall c; 49 50 USED(a2); 51 USED(a3); 52 c.fn = (void*)fn; 53 c.n = nargs; 54 c.args = &a1; 55 runtime·cgocall(runtime·asmstdcall, &c); 56 err = c.err; 57 r1 = c.r1; 58 r2 = c.r2; 59 } 60 61 func Syscall6(fn uintptr, nargs uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) (r1 uintptr, r2 uintptr, err uintptr) { 62 WinCall c; 63 64 USED(a2); 65 USED(a3); 66 USED(a4); 67 USED(a5); 68 USED(a6); 69 c.fn = (void*)fn; 70 c.n = nargs; 71 c.args = &a1; 72 runtime·cgocall(runtime·asmstdcall, &c); 73 err = c.err; 74 r1 = c.r1; 75 r2 = c.r2; 76 } 77 78 func Syscall9(fn uintptr, nargs uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr, a7 uintptr, a8 uintptr, a9 uintptr) (r1 uintptr, r2 uintptr, err uintptr) { 79 WinCall c; 80 81 USED(a2); 82 USED(a3); 83 USED(a4); 84 USED(a5); 85 USED(a6); 86 USED(a7); 87 USED(a8); 88 USED(a9); 89 c.fn = (void*)fn; 90 c.n = nargs; 91 c.args = &a1; 92 runtime·cgocall(runtime·asmstdcall, &c); 93 err = c.err; 94 r1 = c.r1; 95 r2 = c.r2; 96 } 97 98 func Syscall12(fn uintptr, nargs uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr, a7 uintptr, a8 uintptr, a9 uintptr, a10 uintptr, a11 uintptr, a12 uintptr) (r1 uintptr, r2 uintptr, err uintptr) { 99 WinCall c; 100 101 USED(a2); 102 USED(a3); 103 USED(a4); 104 USED(a5); 105 USED(a6); 106 USED(a7); 107 USED(a8); 108 USED(a9); 109 USED(a10); 110 USED(a11); 111 USED(a12); 112 c.fn = (void*)fn; 113 c.n = nargs; 114 c.args = &a1; 115 runtime·cgocall(runtime·asmstdcall, &c); 116 err = c.err; 117 r1 = c.r1; 118 r2 = c.r2; 119 } 120 121 func Syscall15(fn uintptr, nargs uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr, a7 uintptr, a8 uintptr, a9 uintptr, a10 uintptr, a11 uintptr, a12 uintptr, a13 uintptr, a14 uintptr, a15 uintptr) (r1 uintptr, r2 uintptr, err uintptr) { 122 WinCall c; 123 124 USED(a2); 125 USED(a3); 126 USED(a4); 127 USED(a5); 128 USED(a6); 129 USED(a7); 130 USED(a8); 131 USED(a9); 132 USED(a10); 133 USED(a11); 134 USED(a12); 135 USED(a13); 136 USED(a14); 137 USED(a15); 138 c.fn = (void*)fn; 139 c.n = nargs; 140 c.args = &a1; 141 runtime·cgocall(runtime·asmstdcall, &c); 142 err = c.err; 143 r1 = c.r1; 144 r2 = c.r2; 145 }