From efaf0053506a980c959a2474abdb43ee1e7558d9 Mon Sep 17 00:00:00 2001 From: JupiterRider <60042618+JupiterRider@users.noreply.github.com> Date: Thu, 16 Nov 2023 13:06:56 +0100 Subject: [PATCH] implement version check --- raylib/purego_windows.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/raylib/purego_windows.go b/raylib/purego_windows.go index af4dcc7..470d16d 100644 --- a/raylib/purego_windows.go +++ b/raylib/purego_windows.go @@ -5,22 +5,35 @@ package rl import ( "fmt" + "unsafe" "github.com/ebitengine/purego" "golang.org/x/sys/windows" ) const ( - libname = "raylib.dll" + libname = "raylib.dll" + requiredVersion = "5.0" ) // loadLibrary loads the raylib dll and panics on error func loadLibrary() uintptr { - if handle, err := windows.LoadLibrary(libname); err != nil { + handle, err := windows.LoadLibrary(libname) + if err != nil { panic(fmt.Errorf("cannot load library %s: %w", libname, err)) - } else { - return uintptr(handle) } + + proc, err := windows.GetProcAddress(handle, "raylib_version") + if err != nil { + panic(err) + } + + version := windows.BytePtrToString(**(***byte)(unsafe.Pointer(&proc))) + if version != requiredVersion { + panic(fmt.Errorf("version %s of %s doesn't match the required version %s", version, libname, requiredVersion)) + } + + return uintptr(handle) } func traceLogCallbackWrapper(fn TraceLogCallbackFun) uintptr {