Olá, depois de um tempo sem postar nada, trago um exemplo de como se carregar variáveis de um arquivo lua para o seu aplicativo em c++, utilizando Dev-C++.
A linguagem lua vem sendo utilizada em muitos jogos, um grande exemplo é o jogo online Tibia, não é grande a atuação da linguagem lua neste jogo, ela é utilizada para se carregar variáveis como SERVIDOR, USUARIO, VERSÃO, entre outros detalhes.
Então vamos lá. Primeiramente temos que entender que a biblioteca que utilizaremos para carregar arquivos lua foi inicialmente desenvolvida para C, portanto, se você pretende utilizar C++ é necessário um comando para que seja possivel utilizar.
A linguagem lua vem sendo utilizada em muitos jogos, um grande exemplo é o jogo online Tibia, não é grande a atuação da linguagem lua neste jogo, ela é utilizada para se carregar variáveis como SERVIDOR, USUARIO, VERSÃO, entre outros detalhes.
Então vamos lá. Primeiramente temos que entender que a biblioteca que utilizaremos para carregar arquivos lua foi inicialmente desenvolvida para C, portanto, se você pretende utilizar C++ é necessário um comando para que seja possivel utilizar.
externn "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
Agora vamos ao nosso arquivo lua que guardará as variáveis. Crie um arquivo com a extenção lua e grave as seguintes vareiáveis:
SERVIDOR = "localhost"
USUARIO = "ROOT"
SENHA = "123"
Salve-o com o nome que desejar, desde que esteja na mesma pasta que o seu projeto. Para que o nosso programa possa ler as variáveis quando quiser, sem necessitar de um código enorme toda a vez que for capturar a variável, vamos criar uma função CarregaVariavel do tipo Const Char*. Esta função recebera o seguinte parâmetro:
variavel é a variavel que será carregada.
variavel é a variavel que será carregada.
const char* CarregaVariavel(char* variavel)
{
// Variavel
lua_State *LuaVar = lua_open();
// Carrega o arquivo
int sts = luaL_loadfile(LuaVar, "hello.lua");
// Se carregou o arquivo
if( sts== 0 ) {
// Carrega os dados do arquivo em si...
sts = lua_pcall(LuaVar, 0, LUA_MULTRET,0);
}
// Captura o valor da variavel entre aspas.
lua_getglobal(LuaVar,variavel);
// Atribui a uma variavel o valor capturado
return lua_tostring(LuaVar,-1);
lua_close(LuaVar);
}
Para chamarmos a nossa função, declararemos uma variavel do tipo const char e chamamos a nossa função. como abaixo
const char *teste;O nosso programa final pode ser visto na listagem abaixo.
teste = CarregaVariavel("SERVIDOR");
const char* CarregaVariavel(char* variavel);
int main( int argc, char ** argv) {
const char *servidor;
const char *usuario;
const char *senha;
servidor = CarregaVariavel( "SERVIDOR" );
cout << servidor << endl;
usuario = CarregaVariavel("USUARIO");
cout << usuario << endl;
senha = CarregaVariavel("SENHA");
cout << senha << endl;
system("pause");
return 0;
}
const char* CarregaVariavel(char* variavel)
{
// Variavel
lua_State *LuaVar = lua_open();
// Carrega o arquivo
int sts = luaL_loadfile(LuaVar, "hello.lua");
// Se carregou o arquivo
if( sts== 0 ) {
// Carrega os dados do arquivo em si...
sts = lua_pcall(LuaVar, 0, LUA_MULTRET,0);
}
// Captura o valor da variavel entre aspas.
lua_getglobal(LuaVar,variavel);
// Atribui a uma variavel o valor capturado
return lua_tostring(LuaVar,-1);
lua_close(LuaVar);
}
"Mas pô sipmann.. deu erro na hora de compila aqui no dev...??"... Para poder compilar é necessário baixar o pacote (através do sistema de pacotes do dev mesmo) "lua"... "Prontooo... e agora???"... Agora é necessário dizer ao compilador que iremos utilizar a biblioteca que acabamos de baixar (lembram do acesso ao mysql??? mesma coisa) Project >> Project Options >> Parameters... ai na lista "Linker" adicionem as duas linhas a seguir...
-lLua -lLualib
Pronto... só compilar e brincar...
Abração e espero que tenham gostado... qualquer duvida só posta ai... até
-lLua -lLualib
Pronto... só compilar e brincar...
Abração e espero que tenham gostado... qualquer duvida só posta ai... até
Maurício,
ResponderExcluirEstou começando a estudar lua. Tentei compilar pelo Dev-C++ mas ele não está reconhecendo os comando em lua.
Inclui os lua.h na pasta C:\Dev-Cpp\include.
Fiz o seguinte programa:
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include "luaconf.h"
}
int main(void)
{
print("hello world");
return 0;
}
Mas o comando print não é reconhecido
Bom Dia Leonardo,
ResponderExcluira parte em Lua esta OK, mas em C++ para se "imprimir" algo na tela utiliza-se printf("TEXTO") ou cout << "TEXT << endl
ok?? Qualquer dúvida estou a disposição.
Abraços
Ah bom! Com printf eu consegui. Mas como a apostila lua informa o comando print, eu pensei que o print fosse um comando da linguagem lua, e printf do C++.
ResponderExcluirCara, valeu pela dica e pela rapidez!! hehe.
Provavelmente voltarei com mais perguntas a respeito!
Flw
Maurício,
ResponderExcluirTentei compilar o seu programa (acima) e o compilador acusou os seguintes erros:
18 `cout' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
18 `endl' undeclared (first use this function)
26 `system' undeclared (first use this function)
33 `lua_open' undeclared (first use this function)
Boa Tarde,
ResponderExcluiro problema com o cout e o endl é simplesmente adicionar a biblioteca iostream.h
#include
o problema com o lua_open... Você esta colocando os includes corretos??
Qual a versão das bibliotecas do Lua que você esta usando???
Você colocou os parâmetros no "Linker" do Dev-C++??
Acabei de testar o código e a princípio esta funcionando... Qualquer coisa lhe passo por e-mail os arquivos todos...
Abraço
cout e endl resolvido com a inclusão do #include
ResponderExcluirEstou usando lua-5.2.0-beta
Coloquei os parâmetros no linker.
Me envia os arquivos por e-mail, por favor: leonardoja@ig.com.br
Estou colocando os includes da seguinte forma:
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include "luaconf.h"
}
Boa noite Maurício C. Sipmann.
ResponderExcluirBom é o seguinte, a minha duvida esta relaciona com o seguinte.O código que vc fez acima após o script lua ser criado, todo esse código vai no script ou numa arquivo .cpp ou c.
e que tentei colocar num arquivo .cpp só que reparei que os métodos não tem return.
Eu programo a 12 anos em java mas em C/C++ e lua estou aprendendo agora.
Dês de já Agradeço sua Atenção.
Att:
Wiliam Moscon
Opa... boa noite... Não sei se entendi a sua "separação" dos códigos... Mas seguinte, ali onde fala "O nosso programa final pode ser visto na listagem abaixo." Dali até o próximo texto é código c/c++.
ResponderExcluira única coisa que esta escrito em lua é:
SERVIDOR = "localhost"
USUARIO = "ROOT"
SENHA = "123"
Espero ter esclarecido.
Att