0

PRobot API を C# .NET プログラムに統合しようとしていますが、理解できない問題が発生しています。次のコマンドを実行しようとしています。

PTRobot_Initialize()
PTRobot_EnumRobots(HANDLE * phRobots, DWORD * pdwNumRobots)
PTRobot_GetRobotInfo(HANDLE hRobot, PTRobotInfo *pRobotInfo)
PTRobot_EnumDrives(HANDLE hRobot, HANDLE * phDrives, DWORD * pdwNumDrives)
PTRobot_GetDriveInfo(HANDLE hDrive, PTDriveInfo* pDrvInfo)

これは API ドキュメントに由来します。また、Primera は DLL を囲む C# 用の .NET ラッパーも開発しました。更新された関数は次のとおりです。

PTRobot_Initialize()
PTRobot_EnumRobots(ref UInt32 nRobots, ref UInt32 pnNumRobots)
PTRobot_GetRobotInfo(UInt32 nRobotID, [In, Out] RobotInfo myRobotInfo)
PTRobot_EnumDrives(UInt32 nRobotID, ref UInt32 nDriveIDs, ref UInt32 nNumDrives)
PTRobot_GetDriveInfo(UInt32 nDriveID, [In, Out] DriveInfo myDriveInfo)

プログラムに .NET 関数を統合しようとしていますが、問題が発生しています。EnumRobots のパラメータ nRobots は「見つかったロボットを格納する HANDLE の配列を指します」が、EnumDrives パラメータ nDriveIDs は「見つかったドライブを格納する DWORDS の配列を指します」。私の質問は、この uint から配列を取得するにはどうすればよいですか?

4

1 に答える 1

0

答えが見つかりました。疑問に思っているすべての人のために、あなたは次のことをします:

uint numRobots = 5;
uint numDrives = 5;
uint[] robotArray = new uint[numRobots];
uint[] driveArray = new uint[numDrives];


DriveInfo arr = new DriveInfo();
PTRobotReturn rtn;
RobotInfo rI = new RobotInfo();
rtn = PTRobot.Initialize();

rtn = PTRobot.EnumRobots(ref robotArray[0], ref numRobots);

rtn = PTRobot.GetRobotInfo(robotArray[0], ref rI);

rtn = PTRobot.EnumDrives(robotArray[0], ref driveArray[0], ref numDrives);

rtn = PTRobot.LoadDrive(robotArray[0], driveArray[0], PrimeraTechnology.DiscLocation.Right_Bin, PrimeraTechnology.ClearDrive.Yes);
于 2012-09-15T16:38:11.360 に答える