C# Dllimport - 指向接收数组的指针

C# Dllimport - pointer to a pointer receiving array

我正在尝试 DLLImport 函数 simxGetObjects 来自 v-rep 软件的 remoteApi.dll。这是函数描述的link: http://www.coppeliarobotics.com/helpFiles/en/remoteApiFunctions.htm#simxGetObjects

这里是上面link:

对这个函数的简要描述

描述:检索给定类型或所有类型(即所有对象句柄)的对象句柄

C 概要: 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函数操作模式。此功能的推荐操作模式是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 变量都为零。

如果有人能帮助我,我将不胜感激。

试试这个:

[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            
    }
}