[R-br] usar funções em C dentro do objeto DLL

Cleber N.Borges klebyn em yahoo.com.br
Seg Nov 19 22:01:25 -02 2018


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 em listas.c3sl.ufpr.br <mailto:r-br em 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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20181119/99a8524c/attachment.html>


Mais detalhes sobre a lista de discussão R-br