【发布时间】:2011-02-04 08:05:26
【问题描述】:
我们正在 c#、.net 4.0、Win7 x64 上构建一个应用程序,目标是 x32。
我们在应用程序中使用了第 3 方库。我们知道这个库是用 C++ 编写的。但是,为了让 c# 开发人员使用这个库,他们使用 P/Invoke 对其进行了包装,这就是我们调用 API 函数的方式。
其中一个 API 调用如下:
ReadFromDevice(int deviceAddress, int numBytes, Byte[] data);
此函数从外部设备读取 numBytes 的数据并将其放在 data[] 中。如您所见,它希望看到一个 C# 字节数组作为第三个参数。现在,我们的问题是,我们想将数据读取到预先声明的数组中的任意位置。例如:
Byte[] myData = new Byte[1024*1024*16];
ReadFromDevice(0x100, 20000, &myData[350]) // Obviously not possible in C#
如果我们使用 C/C++,这将是微不足道的。鉴于底层 API 是用 C++ 编写的,我觉得我们应该也可以在 c# 中执行此操作,但是我不知道如何在 c# 中执行此操作。也许我们可以不通过提供的 P/Invoke 接口调用底层库并编写自定义接口?
任何想法都将不胜感激。
问候,
【问题讨论】:
标签: c# .net pointers pinvoke bytearray