21.12.2022 Views

python_para_desenvolvedores_2ed

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

318 Integração com outras linguagens

# corresponde a que botão foi pressionado

i = ctypes.windll.user32.MessageBoxA(None,

'Teste de DLL!', 'Mensagem', 0)

# O resultado indica qual botão foi clicado

print i

Para funções que seguem a convenção de chamada cdecl, usada pela maioria

dos compiladores C, existe a classe cdll. Para as passagens de argumentos por

referência é preciso criar uma variável que funciona como um buffer para

receber os resultados. Isso é necessário para receber strings, por exemplo.

Exemplo com cdll e buffer:

# -*- coding: latin1 -*-

import ctypes

# msvcrt é a biblioteca com a maioria das funções

# padrões da linguagens C no Windows

# O Windows coloca automaticamente

# a extensão do arquivo

clib = ctypes.cdll.msvcrt

# Cria um buffer para receber o resultado

# a referência para o buffer será passada para

# a função, que preenche o buffer com o resultado

s = ctypes.c_buffer('\000', 40)

# sscanf() é uma função que extrai valores

# de uma string conforme uma mascara

clib.sscanf('Testando sscanf!\n',

'Testando %s!\n', s)

# Mostra o resultado

print s.value

É possível também evocar funções de bibliotecas compartilhadas no Linux:

# -*- coding: latin1 -*-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!