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

标签 c# c++ windows dll unmanaged

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

相关文章:

c# - 在 C# 中创建远程 PowerShell session ?

c++ - 模板指针参数包

c++ - 在 C++ 命名空间中使用内置类型(double、int 等)?

c++ - qmap 可选参数的默认值

c# - 通过我自己的代码检测对 DependencyProperty 的更改

c# - 国家气象服务 API 内部服务器错误

javascript - 如何从多个对象创建一个类对象?

c - RegQueryValueExW 返回 C 中的访问冲突读取位置异常

c# - 更改外部窗口的最小尺寸

python - 是否可以在 python 中返回 AD 中的所有计算机