我必须调用一个接受void *参数作为附加数据和两个函数参数的函数。
这两个函数接收附加数据。 我想将一个int和两个double数组打包到附加数据参数中。我还需要能够打开它们。
包装:
double *AffineAndPoints2d;
double *Intrinsics;
int ncams;
...
LOGD("3.4 %d", ncams);
LOGD("3.5 %f", Intrinsics[2]);
LOGD("3.6 %f", AffineAndPoints2d[4]);
void* adata[3];
adata[0]=&ncams;
adata[1]=AffineAndPoints2d;
adata[2]=Intrinsics;
在上述某个功能中解压缩:
static void proj_motstr(int j, int i, double *aj, double *bi, double *xij, void *adata)
{
int *ncams=((int **)&adata)[0];
double *affineAndPts2D = ((double **)((&adata + sizeof(int *))))[0];
double *intrinsics = ((double **)((&adata + sizeof(int *))))[1];
LOGD("4.4 %d", *ncams);
LOGD("4.5 %f", intrinsics[2]);
LOGD("4.6 %f", affineAndPts2D[4]);
}
所有这些都在Android JNI中,但这是无关紧要的。
输出:
3.4 3
3.5 -625.041382
3.6 563.992036
4.4 1603595320
4.5 -0.000000
Fatal signal 7 (SIGBUS) at 0x5f2a4c15 (code=1), thread 30116 (Thread-9197)
完整代码:http://pastebin.com/0YwfVzyA
我不知道我在做什么。请帮忙!
这是proj_motstr
的更新版本,应该有效。
static void proj_motstr(int j, int i, double *aj, double *bi, double *xij, void *adata)
{
void** in = (void**)data;
int *ncams=(int *)(in[0]);
double *affineAndPts2D = (double *)(in[1]);
double *intrinsics = (double *)(in[2]);
LOGD("4.4 %d", *ncams);
LOGD("4.5 %f", intrinsics[2]);
LOGD("4.6 %f", affineAndPts2D[4]);
projHybrid(j, i, aj, bi, (double)(*ncams), affineAndPts2D, intrinsics, xij);
}
答案 0 :(得分:1)
你可以从void *:
中重新投射int ncams = *reinterpret_cast<int*>(adata[0]);
double *affineAndPts2D = reinterpret_cast<double*>(adata[1]);
double *intrinsics = reinterpret_cast<double*>(adata[2]);