Narzędzia użytkownika

Narzędzia witryny


c_i_lua

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision Both sides next revision
c_i_lua [2010/12/29 12:07]
sjablon1
c_i_lua [2010/12/29 12:20]
sjablon1
Linia 260: Linia 260:
 zdejmiemy ze stosu wartość zwracaną przez funkcję. Ilustruje to poniższy przykład: zdejmiemy ze stosu wartość zwracaną przez funkcję. Ilustruje to poniższy przykład:
  
 +**Listing 8** Przykład wywołania funkcji Lua w kodzie C++.
  
 <code cpp> <code cpp>
Linia 336: Linia 337:
  
 === Wywoływanie funkcji C++ w kodzie Lua === === Wywoływanie funkcji C++ w kodzie Lua ===
-BUUU+ 
 +Spróbujmy zrobić wykonać to samo zadanie odwrotni. Wywołajmy funkcję napisaną w C++ w kodzie Lua. Funkcje w Lua są wywoływane używając wskaźnika na funkcję: 
 + 
 +''​typedef int (*lua_CFunction) (lua_State *L);''​ 
 + 
 +Wynika z tego, że funkcje przyjmują jako argument interpretator Lua i zwracają wartość int. Napiszmy funkcję w C++, która będzie liczyła sumę liczb przekazanych do funkcji, których liczba będzie zmienna: 
 + 
 +**Listing 9** Funkcja liczącą sumę podanych liczb w C++ wywoływana z poziomu kodu Lua. 
 + 
 +<code cpp> 
 + 
 + 
 + 
 +#include <​iostream>​ 
 + 
 +// dołączenie nagłówków Lua 
 +extern "​C"​ 
 +
 +    #include "​lua.h"​ 
 +    #include "​lualib.h"​ 
 +    #include "​lauxlib.h"​ 
 +
 + 
 + 
 +// Interpretator Lua 
 +lua_State* L; 
 + 
 +// Funkcja przygotowana do wywołania w kodzie Lua 
 +static int suma(lua_State *L) 
 +
 +    // pobranie liczby argumentów 
 +    int n = lua_gettop(L);​ 
 + 
 +    int suma = 0; 
 +     
 +    // sumowanie argumentów 
 +    for (int i = 0; i < n; ++i) 
 +        suma += lua_tonumber(L,​ i); 
 + 
 +    // zwrócenie sumy 
 +    lua_pushnumber(L,​ suma) 
 +     
 +    // zwracamy ilość wartości zwracanych przez funkcję 
 +    return 1; 
 +
 + 
 + 
 +int main() 
 +
 +    int sub = 0; 
 + 
 +    // utworzenie maszyny wirtualnej Lua.  
 +    L = lua_open();​ 
 +  
 +    // inicjalizacja standardowych bibliotek 
 +    luaL_openlibs(L);​ 
 +  
 +    // wczytanie skryptu Lua 
 +    if (luaL_dofile(L,​ "​zpr.lua"​)) 
 +    { 
 +        // Walidacja wcztania skryptu 
 +        std::cout << "Error while running script: " << lua_tostring(L,​ -1) << std::​endl;​ 
 +        return 1; 
 +    } 
 +  
 + 
 +     
 +    // zamknięcie maszyny wirtualnej 
 +    lua_close(L);​ 
 +    return 0; 
 + 
 +
 + 
 +</​code>​ 
 + 
 + 
 +**Listing 10** Przykład wywołania w skrypcie Lua funkcji napisanych w C++ 
 +<code cpp> 
 + 
 +--zpr.lua 
 +srednia , sum = f_srednia(10,​ 20, 30, 40, 50) 
 +print("​Srednia wynosi: ", srednia) 
 +</​code>​ 
 + 
  
 ==== Więcej informacji ==== ==== Więcej informacji ====
c_i_lua.txt · ostatnio zmienione: 2010/12/29 12:22 przez sjablon1