我有一个托管C++的DLL导出下列方法:发送已字节[] []其间C++非托管的DLL和C#DLL管理
ERASURE_API void encode(unsigned char ** inp, unsigned char ** outp,
unsigned int *block_nums, size_t num_block_nums, size_t sz);
ERASURE_API void decode(unsigned char ** inp, unsigned char ** outp,
unsigned int * index, size_t sz);
INP和OUTP的大小可以10KB大,会是什么成为从C#托管代码中调用这些方法的最佳性能方式?
编辑:我做了下面的实现,它的工作原理,但它是最有效的方式来做到这一点。
C++:
ERASURE_API void encode_w(unsigned char * inpbuf,int k, unsigned char * outpbuf,
int nfecs, unsigned int * block_nums, size_t num_block_nums, size_t sz)
{
unsigned char ** inp= new unsigned char*[k];
for(i=0;i<k;i++){
inp[i] = inpbuf+i*sz;
}
unsigned char ** outp= new unsigned char *[nfecs];
for(i=0;i<nfecs;i++){
outp[i] =outpbuf+i*sz;
}
encode(inp,outp,block_nums,num_block_nums,sz);
delete [] inp;
delete [] outp;
}
C#:
[DllImport("erasure.dll")]
public static extern void encode_w([In] byte[] inpbuf,int k,[Out] byte[] outpbuf,
int nfecs, uint[] block_nums, int num_block_nums, int sz);
可以将inp和outp指向与重叠相同的数组吗? – 2009-11-10 08:13:22
这可能是一个选项。 – rkatiyar 2009-11-10 08:57:20