2015-07-21 143 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