
Olá Cesar, Obrigado pelo comentário... Não há uma biblioteca para essa ligação. É justo a ligação que pretendia construir. Até onde entendi a ligação se daria pelo uso dessa função do R: ".C" para manuseio das funções dentro da dll. Mas de fato, imagino que a função esteja escrevendo o valor da variável (no caso uma string) mas que eu não entendi como fazer esse parâmetro ser transportado para o R (tal como foi feito no exemplo em Python). O help da função .C diz: ###### .C(.NAME, ..., NAOK = FALSE, DUP = TRUE, PACKAGE, ENCODING) onde: |.NAME| = a character string giving the name of a C function ... = arguments to be passed to the foreign function. ###### Por isso tentei: > result <- .C("FDwfGetVersion", ver=as.character() ) na esperança de que a string em C fosse "magicamente" repassada para a variável "ver", em R. Mas não deu certo! :-( Ainda não consegui achar nenhum exemplo na internet para elucidar esse meu probleminha! Obrigado pela atenção Cleber Borges Em 19/11/2018 20:16, Cesar Rabak por (R-br) escreveu:
Se a lógica de chamar uma função C se mantém com a API do R que vc está usando, necessitar-se-ia que na chamada a FDwfGetVersion você passasse uma posição de memória para a função preencher a cadeia (a.k.a. /ponteiro/ para memória no jargão C).
O que a documentação da biblioteca R para ligação com o C diz a esse respeito?
On Sun, Nov 18, 2018 at 3:53 PM Cleber N.Borges por (R-br) <r-br@listas.c3sl.ufpr.br <mailto:r-br@listas.c3sl.ufpr.br>> wrote:
olá a todos... boa tarde!
Estou tentando aprender como usar uma DLL, via "dyn.load" e ".C" dentro do R.
Fiz uns testes (abaixo tem um pedaço do que tentei) e não consegui entender como fazer isso.
Se alguém puder dar uma dica de como fazer essa manipulação, seria de muita ajuda!
E agradeço desde já por qualquer dica.
Obrigado!
Cleber
###
No pdf explicando o SDK, tem detalhe da função:
FDwfGetVersion(char szVersion[32]) Description: Retrieves the version string. The version string is composed of major, minor, and build numbers (i.e., “2.0.19”).
##############################################################
### No R, eu tentei:
> dwf <- dyn.load("C:\\Program Files (x86)\\Digilent\\WaveForms3\\dwf") > is.loaded("FDwfGetVersion") [1] TRUE > result <- .C("FDwfGetVersion", ver=as.character() ) > str(result) List of 1 $ ver: chr(0) >
#################################
Mas em Python, vi que o resultado é o seguinte ( exemplos em Python são disponibilizados pelo fabricante)
#################################
>>> from ctypes import * >>> dwf = cdll.dwf >>> version = create_string_buffer(16) >>> dwf.FDwfGetVersion(version) 1 >>> print("DWF Version: "+str(version.value)) DWF Version: 3.8.22 >>>
--- Este email foi escaneado pelo Avast antivírus. https://www.avast.com/antivirus