2015-07-21 140 views
0

我正在嘗試DLLImport函數simxGetObjectsremoteApi.dll v-rep軟件。這裏是鏈接到該函數描述: http://www.coppeliarobotics.com/helpFiles/en/remoteApiFunctions.htm#simxGetObjectsC#Dllimport - 指針接收數組的指針

,這裏是從上面的鏈接該功能的簡要說明:

描述:中檢索對象的給定類型的把手,或所有類型的(即,所有對象處理)

ç簡介: simxInt simxGetObjects(simxInt clientID的,simxInt的objectType,simxInt * objectCount,simxInt ** objectHandles,simxInt一個operationMode)

C參數:
clientID:客戶端ID。請參閱simxStart。

的objectType:對象類型(sim_object_shape_type,sim_object_joint_type等,或用於sim_handle_all任何類型的對象

objectCount:指針的值,將接收檢索的句柄數

objectHandles:指針指向一個將接收對象句柄數組的指針,該數組在調用下一個遠程API函數前保持有效 operationMode:遠程API函數操作模式推薦操作mod E對於這個功能simx_opmode_oneshot_wait

這裏就是這樣,我將其導入(simxGetObjects功能):

[DllImport("remoteApi.dll", CallingConvention = CallingConvention.Cdecl)] 
    public static extern int simxGetObjects(int clientID, string objectType, IntPtr objectCount, ref IntPtr objectHandles, string operationMode); 

,這裏是我如何我稱之爲:

int intClientID = simxStart("127.0.0.1", 19999, true, true, 5000, 5); 
IntPtr intptrObjectCount = IntPtr.Zero; 
IntPtr intptrObjectHandles = IntPtr.Zero; 
simxGetObjects(intClientID, "sim_handle_all", intptrObjectCount, ref intptrObjectHandles, "simx_opmode_oneshot_wait"); 

它不顯示任何錯誤,但是intptrObjectCount和intptrObjectHandles變量都爲零。

我真的很感謝有人能幫助我。

+0

什麼是simxGetObjects的返回值? – walruz

+0

返回值是一個標誌,顯示函數的狀態是否成功。但是,實際的輸出是我需要獲得的'objectCount'和'objectHandles'。它基本上調用在後臺運行的軟件,並檢索場景中所有對象的編號和句柄。 – NESHOM

+0

返回值(我的意思是價值本身)可能有助於理解你做錯了什麼。 – walruz

回答

1

試試這個:

[DllImport("remoteApi.dll", CallingConvention = CallingConvention.Cdecl)] 
public static extern int simxGetObjects(
    int clientID, 
    int objectType, 
    out int objectCount, 
    out IntPtr objectHandles, 
    int operationMode 
); 

int objectCount; 
IntPtr objectHandles; 

int result = simxGetObjects(clientID, 
          objectType, 
         out objectCount, 
         out objectHandles, 
          operationMode); 
if(result == 0 && objectHandles != IntPtr.Zero) 
{ 
    for(int index = 0; index < objectCount; index++) 
    { 
     IntPtr handle = (IntPtr)((int)objectHandles + index*4); 

     // do something with handle    
    } 
} 
+0

感謝您的回覆。我使用字符串的原因是基於描述'sim_handle_all'是需要用來獲取所有對象的值。所以我將'sim_handle_all'作爲字符串傳遞給函數。我無法在文檔中找到它的整數值。 – NESHOM

+0

@NESHOM:這裏是C synopsys:「simxInt simxGetObjects(simxInt clientID,simxInt objectType,simxInt * objectCount,simxInt ** objectHandles,simxInt operationMode)」。objectType和operationMode只是枚舉。字符串將被刪除! – walruz

+0

謝謝你,但我認爲,現在的問題全部是關於objectHandles,它是指向將接收對象句柄數組的指針的指針。我怎樣才能編組這個並獲得對數組項的訪問? – NESHOM