11 views
Skip to first unread message

Augusto Rodrigues

unread,
Apr 4, 2025, 10:44:00 PMApr 4
to lua...@googlegroups.com
Caros(as),

Imagine que tem uma aplicação em C que contém as seguintes declarações de tipos:

typedef struct {
char field_1;
/* N declarações de campos aqui */
int field_N;
} STRUCT_1;

/* Aqui várias declarações de estruturas de dados - STRUCT_2, ...., STRUCT_N-1*/

typedef struct {
char field_1;
/* N declarações de campos aqui */
int field_N;
} STRUCT_N;

Baseado nos tipos declarados acima, é construída o seguinte tipo de dado:
typedef struct {
STRUCT_1 struct_1;
/ N declarações de campos do tipo struct */
STRUCT_N struct_N;
} BIG_STRUCT;

A aplicação preenche todos os campos de uma variavel do tipo BIG_STRUCT e, se usar a maneira convencional de transformar estruturas em C em tabelas Lua, serei obrigado usar um lua_push* e um lua_setfield para campo da variável do tipo BIG_STRUCT.

Gostaria de saber se existe um outro jeito de transformar a variavel do tipo  BIG_STRUCT em C em tabelas Lua que serão processadas pelos scripts Lua.

Pesquisei sobre algumas alternativas:
- Usar o LuaJit com FFI: Entendi que o ffi.cdef consegue criar uma tabela a partir de um trecho de código em C através do uso de ffi.cdef e ffi.new

Consigo repassar o conteúdo da variável do tipo BIG_STRUCT para o Lua via lua_pushlstring. Mas no lado do script Lua não consigo visualizar uma forma de repassar esse stream de bytes para o objeto criado pela função ffi.new.

Seria possível fazer isso? Se sim, como ? Tem alguma função da biblioteca FFI que permita isso?

-Usar o pack e unpack: Mas aqui eu precisaria montar setters e getters para cada campo que compõe a estrutura BIG_STRUCT :-(

-Outra sugestão... qual?

Se alguem souber de um tutorial com exemplos em ingles sobre o uso do FFI tambem ajudaria muito. 

Atenciosamente
Augusto de Miranda Rodrigues
Reply all
Reply to author
Forward
0 new messages