首页 > 解决方案 > 使用 Matrox ActiveMIL 库控制光谱相机 - 检测到无效的 VARIANT

问题描述

我正在用 C# 编写一个软件来控制和接收来自使用 cameralink 接口的光谱相机的图像,使用 Matrox 公司的 Framegrabber 和 ActiveMIL 库。我正在使用 Visual Studio 2008。

该库提供 ActiveX 控件以在控件窗口中接收和显示相机图像,但我需要将控件加载的数据传递给我自己的数组。

该库为我提供了以下方法来做到这一点:

void object.Get{
     ref Array UserArray,
     ImFormatConstants Format,
     ImBandConstats Band,
     int OffsetX,
     int OffsetY,
     int SizeX,
     int SizeY
     }

然后,我编写了如下代码:

Object IMG = new Object[256*320]; //Size of image is 256 rows and 320 columns
axMImage1.Get(ref IMG, Matrox.ActiveMIL.ImFormatConsts.imPlanar, Matrox.ActiveMIL.ImBandConstants.imAllBands, 0, 0, 320, 256);

当我执行此代码时,我收到以下错误:

从非托管 VARIANT 转换为托管对象期间检测到无效 VARIANT。将无效的 VARIANT 传递给 CLR 可能会导致意外异常、损坏或数据丢失

你能帮我理解错误吗?

注意:参数函数说第一个参数是一个通过引用传递的数组,但是如果我使用并声明一个数组,如下所示:

Array[] IMG = new Array[256*320];

我收到以下错误:

参数 '1':无法从 'ref System.Array[]' 转换为 'ref object'

谢谢。

标签: c#imagecameralibrariesvariant

解决方案


推荐阅读