Thank you for your patience
I think I got it finally
Please test

Code:
#include <FileGetVersionInfo>
AhkDllThread(dll="AutoHotkey.dll",obj=0){
static init,ahkfunction,hLib,ahkexec,DynaCall:="DynaCall", MemoryLoadLibrary:="MemoryLoadLibrary",MemoryFreeLibrary:="MemoryFreeLibrary"
,ResourceLoadLibrary:="ResourceLoadLibrary", MemoryGetProcAddress:="MemoryGetProcAddress"
static AHK_H:=A_IsCompiled?1:FileGetVersionInfo_AW(A_AhkPath,"InternalName")="AutoHotkey_H"
static base:={__Delete:"AhkDllThread"}
static functions ="
(Join
ahkKey:s|ahkFunction:s=sssssssssss|ahkPostFunction:i=sssssssssss|
ahkdll:ut=sss|ahktextdll:ut=sss|ahkReady:|ahkReload:ui=|
ahkTerminate:i|addFile:ut=sucuc|addScript:ut=si|ahkExec:ui=s|
ahkassign:ui=ss|ahkExecuteLine:ut=utuiui|ahkFindFunc:ut=s|
ahkFindLabel:ut=s|ahkgetvar:s=sui|ahkLabel:ui=sui|ahkPause:s
)"
static AhkDllThreadfunc ="
(Join`r`n
#Persistent
#NoTrayIcon
Return
AhkDllThread(dll=""AutoHotkey.dll"",obj=0,map=""""){
static functions = ""ahkKey:s|ahkFunction:s=sssssssssss|ahkPostFunction:i=sssssssssss|""
. ""ahkdll:ut=sss|ahktextdll:ut=sss|ahkReady:|ahkReload:ui=|""
. ""ahkTerminate:i|addFile:ut=sucuc|addScript:ut=si|ahkExec:ui=s|""
. ""ahkassign:ui=ss|ahkExecuteLine:ut=utuiui|ahkFindFunc:ui=s|""
. ""ahkFindLabel:ui=s|ahkgetvar:s=sui|ahkLabel:ui=sui|ahkPause:s""
If (dll=""0"")
return object:=""""
else If dll is digit
return MemoryFreeLibrary(dll)
else If (!FileExist(dll)){
MsgBox File: `%dll`% does not exist`, provide correct path for AutoHotkey.dll
ExitApp
}
object:=IsObject(obj)?obj:{},object[""""]:= MemoryLoadLibrary(dll)
Loop,Parse,functions,|
{
StringSplit,v,A_LoopField,:
object[map="""" ? v1 : !InStr(map,v1) ? v1 : SubStr(map,InStr(map,v1)+StrLen(v1)+1,InStr(map,A_Space,0,InStr(map,v1)))]:=DynaCall(MemoryGetProcAddress(object[""""],v1),v2)
}
object.base:=Object(" (&base) ")
return &object
}
)"
If IsObject(dll){
dll.ahkterminate()
If !AHK_H{
DllCall(ahkfunction,"Str","AhkDllThread","Str",dll[""],"Str","","Str","","Str","","Str","","Str","","Str","","Str","","Str","","Str","","CDecl Str")
} else %MemoryFreeLibrary%(dll[""])
return
} else if (!FileExist(dll) && !A_IsCompiled){
MsgBox File: %dll%`ndoes not exist`, provide correct path for AutoHotkey.dll
ExitApp
}
If !AHK_H{
If (init || ((hLib:=DllCall("LoadLibrary","Str",dll)) && (Init:=DllCall("GetProcAddress","PTR",hLib,"Astr","ahktextdll","PTR")))){
If (ahkfunction || (DllCall(init,"Str",AhkDllThreadfunc,"Str","","Str","","Cdecl UInt") && (ahkfunction:=DllCall("GetProcAddress","PTR",hLib,"Astr","ahkFunction","PTR")) && (ahkExec:=DllCall("GetProcAddress","PTR",hLib,"Astr","ahkExec","PTR")))){
return Object(0+DllCall(ahkfunction,"Str","AhkDllThread","Str",dll,"Str","","Str","","Str","","Str","","Str","","Str","","Str","","Str","","Str","","CDecl Str"))
;reset internal memory in autoHotkey.dll
,DllCall(ahkfunction,"Str","AhkDllThread","Str","0","Str","","Str","","Str","","Str","","Str","","Str","","Str","","Str","","Str","","CDecl Str")
} else {
MsgBox Could not load script in %dll%
Return 0
}
} else {
MsgBox Could not load %dll%
Return 0
}
}
object:=IsObject(obj)?obj:{},object[""]:= A_IsCompiled ? %ResourceLoadLibrary%(dll) : %MemoryLoadLibrary%(dll)
Loop,Parse,functions,|
{
StringSplit,v,A_LoopField,:
object[map="" ? v1 : !InStr(map,v1) ? v1 : SubStr(map,InStr(map,v1)+StrLen(v1)+1,InStr(map,A_Space,0,InStr(map,v1)))]:=%DynaCall%(%MemoryGetProcAddress%(object[""],v1),v2)
}
return object,object.base:=base
}