[R-br] [Dúvida] Invocar funções C++ no R
Benilton Carvalho
beniltoncarvalho em gmail.com
Quinta Agosto 25 17:05:22 BRT 2011
Voce vai precisar ler mesmo o material do manual e, para uma versao
expressa, ver as notas de aula que postei no topico ao qual referi-me
anteriormente.
1) Minha recomendacao (e de todo mundo que usa R+C) e' vc gerar a
biblioteca usando:
R CMD SHLIB arquivo.c
2) Quando o R conversa com o C, tudo o que o C enxerga sao ponteiros.
Entao, toda a comunicacao C <-> R deve ser feita via ponteiros.
Dito isso, seu programa precisa ser ligeiramente modificado:
/* INICIO */
/*
Programa: exfun.c
Objetivo; Primeiro exemplo de uso de funcao
Autor: Adriano Cruz
Data: 12/10/97
*/
#include<stdio.h>
/* Prototipo da funcao */
int soma(int, int);
/* Funcao Principal */
void fPrincipal(double *resultado)
{
int a=5, b=9;
resultado[0] = soma(a,b);
}
/* Definicao da funcao */
int soma(int a, int b)
{
return a+b;
}
/* FIM */
Depois disso, compile-o usando:
R CMD SHLIB arquivo.c
(preste atencao qual arquivo sera' gerado, pq nao to muito certo de
que em Windows sera' um .so, imagino que seja um DLL).
Carregue o R e use:
dyn.load("arquivo.dll")
x = .C("fPrincipal", double(1))
Abaixo e' o q eu tenho:
> dyn.load("teste.so")
> x = .C("fPrincipal", as.double(1))
> x
[[1]]
[1] 14
O segundo argumento em .C() que vc ve, e' reservando, no R, memoria
para 1 numero real, que o programa em C usa para gravar a resposta.
b
Mais detalhes sobre a lista de discussão R-br