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

本文关键字:IntPtr 参数 什么 函数 期望 | 更新日期: 2023-09-27 18:21:42

我对µEye Framework中的一个函数有一个小问题,该函数需要在框架描述中使用以下参数:

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]);

我想我把引用/取消引用搞砸了,但编译器不会声称有任何错误?!

感谢您的帮助:)

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

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]
);