| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // The following function allows one to dynamically |
| // resolve DLL function names. |
| // The arguments are strings. |
| void *get_proc_addr(void *library, void *name); |
| |
| extern void *VirtualAlloc; |
| extern void *LoadLibraryEx; |
| extern void *GetProcAddress; |
| extern void *GetLastError; |
| |
| #define goargs windows_goargs |
| void windows_goargs(void); |
| |
| // Get start address of symbol data in memory. |
| void *get_symdat_addr(void); |
| |
| // Call a Windows function with stdcall conventions. |
| void *stdcall_raw(void *fn, ...); |
| |
| // Call a Windows function with stdcall conventions, |
| // and switch to os stack during the call. |
| void *stdcall(void *fn, int32 count, ...); |
| |
| // Call stdcall Windows function StdcallParams.fn |
| // with params StdcallParams.args, |
| // followed immediately by GetLastError call. |
| // Both return values are returned in StdcallParams.r and |
| // StdcallParams.err. Will use os stack during the call. |
| typedef struct StdcallParams StdcallParams; |
| struct StdcallParams |
| { |
| void *fn; |
| uintptr args[9]; |
| uintptr r; |
| uintptr err; |
| }; |
| void call_syscall(void *args); |
| void syscall(StdcallParams *p); |