[R-br] usar funções em C dentro do objeto DLL
Henrique Matheus
henriquematheus70 em gmail.com
Seg Nov 19 22:36:11 -02 2018
Caros colegas do R!!!
Venho desenvolvendo um projeto com dados de colar GPS de onças-pintadas com
seleção de habitat no Pantanal.
Gostaria de saber se algum de vocês possuem conhecimento sobre o package
AdehabitatHS e AdehabitatLT ???
Aluno do 7° semestre de Ciências Biológicas-UNEMAT
Em Seg, 19 de nov de 2018 21:02, Cleber N.Borges por (R-br) <
r-br em listas.c3sl.ufpr.br escreveu:
> 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> 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
>> >>>
>>
>>
>>
>>
>>
>>
>>
>
>
>
> ------------------------------
> [image: Avast logo] <https://www.avast.com/antivirus>
>
> Este email foi escaneado pelo Avast antivírus.
> www.avast.com <https://www.avast.com/antivirus>
>
> <#m_4528161704605027063_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20181119/0501f927/attachment.html>
Mais detalhes sobre a lista de discussão R-br