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
参数应该是`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]
);