// 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);