
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