我正在使用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)
答案 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: