3

COM 组件公开了一个 API,该 API 需要一个对象类型的 ref 参数。根据此 API 的文档,它将用值数组填充 ref 对象。现在我的问题在于 prod env 我无法预测我将返回的元素数量。

以下代码将起作用。

     COMClass objCOM = new COMClass ();
     object colOfInts= new int[10]; // What if I don't know the following will return array of size 10?
     int errorcode = objCOM.FillThisIn(ref colOfInts);

但是,如果我不知道 API 在 ref 中返回的数组大小怎么办?

在这里更新

        object colOfInts = null;
        int errorcode = objCOM .FillThisIn(ref colOfInts);

现在,当我检查类型时,我得到 System.Int32[*]

基本上我需要遍历这个数组并检查一个元素的存在

4

3 回答 3

3

您将返回一个下限不是 0 的数组。这在 COM 互操作中并不少见,下一个可能的选择是 1。您不必复制它,您可以使用 Array.GetValue() 访问元素。Array.GetLowerBound() 告诉你从哪里开始,Array.GetLength() 或 Array.GetUpperBound() 告诉你要走多远。

于 2012-06-27T16:59:55.000 回答
0

如果你要返回一个数组System.Int32,你可能只需要转换:

    object colOfInts = null; 
    int errorcode = objCOM .FillThisIn(ref colOfInts); 

    int[] arrayOfInts = (int[]) colOfInts;

然后arrayOfInts.Length将有数组中的元素数。

于 2012-06-27T16:58:17.923 回答
0

最后我得到了一些解决方案。忘了提 erroCode 会有数组的大小。

        int[] test = new int[errorCode];            
        Buffer.BlockCopy((System.Array)colOfInts, 0, test, 0, errorCode * sizeof(int));
于 2012-06-27T14:17:15.337 回答