2013-08-26 26 views
0

傳遞二維數組的說法我有一個COM方法我試圖調用,那裏的類型「對象」必須是一個2D雙安全數組,緯度/長點的集合的參數。我如何在JACOB中通過COM接口創建SafeArray?雅各布

我試過路過一家二維數組作爲對象列表中的對象。該方法不會返回錯誤,但我看不到我在FalconView中預期的結果(渲染多邊形)。

double polyPoints[][] = new double[5][2]; 
    polyPoints[0][0] = 75.3; 
    polyPoints[0][1] = 4.5;  
    polyPoints[1][0] = 3.8; 
    polyPoints[1][1] = 4.8; 
    polyPoints[2][0] = 2.3; 
    polyPoints[2][1] = 2.5; 
    polyPoints[3][0] = 5.3; 
    polyPoints[3][1] = 6.5; 
    polyPoints[4][0] = 0.3; 
    polyPoints[4][1] = -1.5; 

// Can't recreate Variant or SafeArray from double[x][y] array; 

    Object[] polygonArgs = new Object[] {m_mainLayerHandle, polyPoints, 1}; 
    Variant returnAddPolygon = Dispatch.invoke(mainLayerDispatch, "AddPolygon", Dispatch.Method, polygonArgs, new int[1]); 
    System.out.println("Polygon Handle: " + returnAddPolygon.getInt()); 

    Object[] refreshArgs = new Object[] {m_mainLayerHandle}; 
    Variant refreshVariant = Dispatch.invoke(mainLayerDispatch, "Refresh", Dispatch.Method, refreshArgs, new int[1]); 

第二arument文檔:

lat_lon_array 雙打的二維SAFEARRAY。第一個維度包含緯度值。第二維包含經度值

回答

0

似乎的SafeArray支持1維,2維,和N維陣列使用一些有些不清楚構造函數。鑑於上面創建的2D雙重陣列,我可以將數據複製到2D Double Safe Array中。創建double [] []前端肯定會更高效,但是我在一些原型代碼中執行此操作。可能有辦法將整個數組複製到安全數組中......我不確定。

// 2D array of type double. First dimension size 5, second dimemnsion size 2. 
SafeArray safeArray = new SafeArray(Variant.VariantDouble, 5, 2); 
for(int i = 0; i < 5; i++) { 
    for (int j = 0; j < 2; j++) { 
      // set the value of safearray[i][j] to value polyPoints[i][j] 
     safeArray.setDouble(i, j, polyPoints[i][j]); 
    } 
} 
相關問題