Lapex писал(а):Из-за недостатка опыта работы с PB - я не могу создать корректный код аналогичный приведенному выше на С и FB.
Lapex писал(а):Спасибо, буду ждать с нетерпеньем.
А пока можешь посмотреть как загружать DLL из памяти, из переменной или ресурсов
Спасибо, я уже пробывал ее - очень удобно, также помещал DLL в ресурс с помощью: LuaDLL RCDATA DISCARDABLE "Lua.dll".А это утилита для "прошивания" бинарников в EXE/DLL файл.
Спасибо, я уже пробывал ее - очень удобно, также помещал DLL в ресурс с помощью: LuaDLL RCDATA DISCARDABLE "Lua.dll
FUNCTION RegFuncs CDECL ALIAS "RegFuncs"(BYREF L AS LUA_STATE, LibMame AS ASCIIZ, FuncName AS ASCIIZ, BYVAL Func AS ASCIIZ PTR) EXPORT AS LONG
lua_pushstring(BYREF L, BYREF LibMame)
lua_gettable(BYREF L, LUA_GLOBALSINDEX)
IF (lua_isnil(BYREF L, -1)) THEN ' если таблица не найдена, то будет создана
' Pop nil from the stack
lua_pop(BYREF L, 1)
' Создаем новую таблицу
lua_newtable(BYREF L) '/* create it */
lua_pushvalue(BYREF L, -1) '/* duplicate it */
lua_setglobal(BYREF L, BYREF LibMame)
END IF
lua_pushstring(BYREF L, BYREF FuncName) '/* Add function name. */
LUA_PUSHCFUNCTION(BYREF L, Func) '/* Add function pointer. */
lua_settable(BYREF L, -3)
lua_pop(BYREF L, 1)
FUNCTION = 0
END FUNCTION
'-------------------------------------------------------------------------------
RegFuncs(L, "MyPlugin", "MyFunction", CODEPTR(MyFunction))
RegFuncs(L, "MyPlugin", "MyFunction1", CODEPTR(MyFunction1))
DECLARE FUNCTION lua_type LUA_API LIB LUA_DLL ALIAS "lua_type"(BYVAL L AS LUA_STATE, _
BYVAL idx AS LONG) AS LONG
GLOBAL zLua_Type AS DWORD
DECLARE FUNCTION Lua_Type (BYVAL L AS DWORD, BYVAL idx AS LONG) AS DWORD
FUNCTION Declare_Lua() AS DWORD
CALL LoadPbDllFromMemory (FileData_Lua_dll, 64512&, hLua_DLL) ' загружаем Lua.dll
zLua_Type = GetProcAddressDirectly (hLua_DLL, "lua_type")
END FUNCTION
'----------------------------------------------------------------
' Вызов ф-ции
CALL DWORD zLua_Type USING Lua_Type (BYREF L, -1)
MACRO FUNCTION LUA_ISNIL(L,n)
END MACRO = (lua_type(L,n) = 0)
FUNCTION Lua_Type (BYVAL L AS DWORD, BYVAL idx AS LONG) AS DWORD
CALL LoadPbDllFromMemory (FileData_Lua_dll, 64512&, hLua_DLL) ' загружаем Lua.dll
zLua_Type = GetProcAddressDirectly (hLua_DLL, "lua_type")
CALL DWORD zLua_Type USING Lua_Type (BYREF L, -1)
END FUNCTION
FUNCTION LUA_ISNIL (BYVAL L AS DWORD, BYVAL idx AS LONG) AS DWORD
DIM res AS DWORD
IF(hLua_DLL=0) THEN CALL LoadPbDllFromMemory (FileData_Lua_dll, 64512&, hLua_DLL) ' загружаем Lua.dll
zLua_Type = GetProcAddressDirectly (hLua_DLL, "lua_type")
CALL DWORD zLua_Type USING Lua_Type (L, idx) TO res
FUNCTION = res
END FUNCTION
А 0 возвращается, если переменная - nil...
Такое пояснение устроит?
MACRO FUNCTION LUA_ISNONEORNIL(L,n)
END MACRO = (lua_type(L,n) <= 0)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4