C#:函数作为IntPtr参数期望什么?

时间:2015-11-13 06:30:41

标签: c# c++

我对μEye框架中的函数有一个小问题,它在框架描述中需要如下参数:

uEye.Memory.Allocate(int s32Width, int s32Height, int s32BitsPerPixel, System.IntPtr allocated, out int s32MemId)

我尝试使用以下代码调用但它将失败:

int[] m_lSeqMemId = new int[MAX_SEQ_BUFFERS];           // camera memory - buffer ID
IntPtr[] m_pcSeqImgMem = new IntPtr[MAX_SEQ_BUFFERS];   // camera memory - pointer to buffer

m_Ret = MyCamera.Memory.Allocate(nAllocSizeX, nAllocSizeY, m_nBitsPerPixel, m_pcSeqImgMem[i], out m_lSeqMemId[i]);

- > ArgumentExeption。

我试图从c ++翻译,但由于C / C ++和C#.net的区别,有两个完全不同的SDK - 谁想到别的东西 - 有完全不同的命名约定。

但是,如果它可能会有所帮助,那么c ++代码如下:

// header.h
INT     m_lSeqMemId[MAX_SEQ_BUFFERS];   // camera memory - buffer ID
char*   m_pcSeqImgMem[MAX_SEQ_BUFFERS]; // camera memory - pointer to buffer

// code.cpp
// allocate buffer memory
m_Ret = is_AllocImageMem(m_hCam,
                         nAllocSizeX,
                         nAllocSizeY,
                         m_nBitsPerPixel,
                         &m_pcSeqImgMem[i],
                         &m_lSeqMemId[i]);

我想我搞砸了引用/解除引用但编译器不会声明任何错误?!

谢谢你的帮助:)

1 个答案:

答案 0 :(得分:1)

C#翻译错误。 IntPtr参数应该是`out参数,因为被调用者分配缓冲区并在该参数中返回其地址。参数应为:

int s32Width, 
int s32Height, 
int s32BitsPerPixel,
out IntPtr allocated,
out int s32MemId

像这样调用函数:

m_Ret = MyCamera.Memory.Allocate(
    nAllocSizeX,
    nAllocSizeY,
    m_nBitsPerPixel, 
    out m_pcSeqImgMem[i], 
    out m_lSeqMemId[i]
);