gpt4 book ai didi

c# - 在 C++ 非托管 dll 和 C# 托管 dll 之间发送 Byte[][]

转载 作者:可可西里 更新时间:2023-11-01 11:40:42 25 4
gpt4 key购买 nike

我有一个导出以下方法的非托管 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);

最佳答案

C++/CLI 是一个选项吗? IMO,它是为这些复杂的互操作/自定义编码(marshal)处理场景而设计的。

关于c# - 在 C++ 非托管 dll 和 C# 托管 dll 之间发送 Byte[][],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1706270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com