Hallo zusammen,
Ich habe mir, zur Übung, eine kleine UDF für die Skriptsprache Wren geschrieben. Dabei bin ich auf folgendes Problem gestoßen:
Um Module in die VM von Wren zu laden werden einige Callback Funktionen verwendet, welche zur Initialisierung der VM mit gegeben werden müssen. Das funktioniert soweit und meine AutoIt-Funktionen werden sauber gestartet.
Bei dem Versuch ein Modul in Wren zu importieren (`import "win32" for Registry` als Beispiel) werden 2 Callback-Funktionen aufgerufen, die erste um den Pfad aufzulösen. die zweite zum eigentlichen Laden.
Die erste Funktion (`resolveModuleFn`) hat folgende Signatur:
typedef const char* (*WrenResolveModuleFn)(WrenVM* vm, const char* importer, const char* name);
Also gehe ich davon aus das ich meine AutoIt-Funktion wie folgt erstelle:
Func _ResolveModuleFnCallback($pVM, $sImporter, $sModule)
; do stuff
Return "some-resolved-module"
EndFunc
Local $ResolveModuleFnHandle = DllCallbackRegister("_ResolveModuleFnCallback", "str", "ptr;str;str")
Wie gesagt, das funktioniert auch alles. Die Callback-Funktion wird aufgerufen und tut ihr Arbeit.
Jedoch wirft mir die Wren-VM danach einen Fehler, dass das besagt Modul nicht gefunden werden konnte. Laut dem C-Code wäre der Rückgabewert NULL.
Mache ich hier irgendetwas falsch oder sollte ich eher in dem C-Code von Wren nach einem Fehler suchen?
Im Anhang findet Ihr das Repo von Wren im "main"-Branch.
Die DLL sowie der AutoIt-Code sind im Ordner "\lib" zu finden. Kompiliert habe ich das ganze mit VS2022, falls Ihr die DLL lieber selbst erstellen wollt
P.S.: ich nutze AutoIt-x64, falls das Skript "test_x64.au3" nicht laufen sollte.
Gruß