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
}
}
我正在尝试 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
}
}