Linhas Verticais

um blog sobre musica, arte, programação e outras coisas.

Cinvoke agosto 7, 2007

Filed under: java,linux,lua,programação — rangelfisica @ 5:12 pm

Cinvoke é um modulo para lua e java que permite realizar chamadas de DLLs (ou shared libs no linux) sem tem que escrever um codigo de cola especifico. Mesmo existindo aplicações para lua como a Tolua que criam este codigo intermediario (uma especie de Swig para lua) muitas vezes desejo apenas testar certas funções antes de escrever todo o programa em C fazendo um esqueleto inicial em lua.

A utlização deste modulo é simples, basta carregar a biblioteca :

libc_dll = clibrary.new(“libc.so.6”)


Pronto temos o objeto libc_dll que representa a biblioteca libc. Para obter a função que se deseja da biblioteca, basta fornecer o tipo de argumento de saida, o nome e os tipos de argumentos de entrada. por exemplo a função strcspn que é definida como :

size_t strcspn (const char *STRING, const char *STOPSET)

é obtida da biblioteca libc para o ambiente da lua com o comando:

strcspn=libc_dll:get_function(Cint,”strcspn”,Cstring,Cstring)

pronto, a função strcspn estará carregada no ambiente da lua sendo possivel utiliza-la como uma função comum. O metodo de chamar uma função da DLL no java é similar, vale a pena quando se deseja utilizar algo especifico do C sem ter que recorrer à JNI.

A Cinvoke tambem permite manusear tipos complexos como estruturas e ponteiros assim como fornecer callbacks que permitem que um codigo em C chame uma rotina em lua quando nescessario.

O unico cuidade que se deve ter é que certas funções são na verdade macros, estas não existem da DLL, no linux basta verificar a shared lib com o objdump.

cinvoke homepage

 

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s