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  }