回复 第4楼 的 yanlinlin82:两个无穷向量x和y的卷积定义为z = sum_{k} x[i-k]*y[k], 两个有限长度向量的卷积是把向量两端填零后卷积然后取非填零部分计算得到的结果。 C程序为:
void convolve(double *a, int *na, double *b, int *nb, double *ab){
int i, j, nab = *na + *nb - 1;
for(i = 0; i < nab; i++)
ab = 0.0;
for(i = 0; i < *na; i++)
for(j = 0; j < *nb; j++)
ab[i + j] += a * b[j];
}
这里所有参数都使用指针, 是因为R中基本的运算单元是向量, 即C中的数组(指针)。
用如上方法得到得到DLL库testdll.dll后, 进入R,运行
dyn.load("testdll.dll")
可以把DLL库调入,注意如果库不在当前工作路径可以使用全路径, 如"c:/work/testdll.dll"。 然后,在R中定义如下包装函数conv:
conv <- function(a, b){
.C("_convolve", as.double(a), as.integer(length(a)),
as.double(b), as.integer(length(b)),
ab=double(length(a)+length(b)-1))$ab
}
运行如:
> conv(c(1,2), c(10,20,30))
[1] 10 40 70 60
但是我这里通过void _stdcall Login(IN CHAR **a,IN CHAR **b,IN int *c,IN int *e)
{
AFX_MANAGE_STATE(AfxGetStaticMOduleState());
CString d=CA2T(a);
CString e=CA2T(b);
*e = (在此调用了另外一个DLL的接口函数,登陆成功返回0.登录失败会返回其他字段);
//怎才能把e返回到R中,需要怎么操作
}返回登陆是否成功,成功则为0,不成功会返回一些其他值,每个值对应一个字段说明。
在R中用.C(“Login”,as.character("abcdef"),as.character("efghlokm"),as.integer(0),as.integer(-1))如何将e值返回到R中。