Use proper types according to MSDN and fix clang build of windows dynlib (#11828)

This commit is contained in:
Giovanni Petrantoni
2019-07-26 17:11:21 +09:00
committed by Arne Döring
parent 4c73139316
commit 2fdba334da

View File

@@ -156,28 +156,24 @@ elif defined(windows) or defined(dos):
# Native Windows Implementation
# =======================================================================
#
when defined(cpp):
type
THINSTANCE {.importc: "HINSTANCE".} = object
x: pointer
else:
type
THINSTANCE {.importc: "HINSTANCE".} = pointer
type
HMODULE {.importc: "HMODULE".} = pointer
FARPROC {.importc: "FARPROC".} = pointer
proc FreeLibrary(lib: THINSTANCE) {.importc, header: "<windows.h>", stdcall.}
proc winLoadLibrary(path: cstring): THINSTANCE {.
proc FreeLibrary(lib: HMODULE) {.importc, header: "<windows.h>", stdcall.}
proc winLoadLibrary(path: cstring): HMODULE {.
importc: "LoadLibraryA", header: "<windows.h>", stdcall.}
proc getProcAddress(lib: THINSTANCE, name: cstring): pointer {.
proc getProcAddress(lib: HMODULE, name: cstring): FARPROC {.
importc: "GetProcAddress", header: "<windows.h>", stdcall.}
proc loadLib(path: string, globalSymbols=false): LibHandle =
result = cast[LibHandle](winLoadLibrary(path))
proc loadLib(): LibHandle =
result = cast[LibHandle](winLoadLibrary(nil))
proc unloadLib(lib: LibHandle) = FreeLibrary(cast[THINSTANCE](lib))
proc unloadLib(lib: LibHandle) = FreeLibrary(cast[HMODULE](lib))
proc symAddr(lib: LibHandle, name: cstring): pointer =
result = getProcAddress(cast[THINSTANCE](lib), name)
result = cast[pointer](getProcAddress(cast[HMODULE](lib), name))
else:
{.error: "no implementation for dynlib".}