我对μ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]);
我想我搞砸了引用/解除引用但编译器不会声明任何错误?!
谢谢你的帮助:)
答案 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]
);