C#数组内存分配

时间:2016-08-11 09:45:58

标签: c# arrays winforms camera

我正在使用Andor_SDK(他们提供的相机的sdk)编写WinForm应用程序。 SDK使用几种语言编写:c ++,c#,vb,labview。 我的问题如下: 为了从相机的内存中检索图像,我需要调用一个功能。

C ++:

unsigned int WINAPI GetOldestImage(at_32* arr, unsigned long size)

要使用此功能,您将分配足够大的数组(关于图像大小和数量)并将该指针传递给该函数。在c ++中,这不是一个问题

我的问题是我怎么能做类似于c#

的工作

供参考,c#中调用的函数是:

uint Andor_SDK.GetOldestImage(int[] arr, uint size)

2 个答案:

答案 0 :(得分:1)

由于您已经显示了C#函数签名,我假设这意味着您或其他人已经为此C API编写了P / Invoke定义。

鉴于此,您应该能够像这样调用它:

int[] arr = new int[1024];
uint result = Andor_SDK.GetOldestImage(arr, arr.Length);

答案 1 :(得分:0)

根据上面提供的C ++函数签名,可以考虑以下代码:

  var array = new int[2048]; // Reserve enough space for your image
  Array.Clear(array, 0, array.Length);

  var result = AnderSdk.GetOldestImage(array, (ulong)array.Length);

Andor SDK包装库:

using System.Runtime.InteropServices;
namespace FrmMarshalingInt
{
    public class AnderSdk
    {
        // Declares a managed prototype for an array of integers by value.
        // The array size cannot be changed, but the array is copied back.
        [DllImport("AndorSDK.dll")]
        public static extern int GetOldestImage([In, Out] int[] array, ulong size);
    }
}

有关编组的其他信息,请参阅MSDN:

Marshaling Different Types of Arrays

PinvokeLib.dll