用C ++访问二维BYTE数组中的元素

时间:2011-08-01 15:57:01

标签: c++ arrays

我正在尝试使用第三方文档中提供的功能,但我无法理解它。我最近想出了IN / OUT变量的含义以及如何使用它们。这个功能的问题在于它有几种不同的类型。我真的很困惑如何访问这些数组元素。以下是功能信息的屏幕截图。

enter image description here

这是我正在使用的代码:

BYTE numDevices = 10;
    BYTE devices;
    ULONG devicesArray = QCWWAN2kEnumerateDevices(&numDevices,&devices);

    //How do I access the elements in the returned array?

ULONG是返回代码,如果它失败/为什么

2 个答案:

答案 0 :(得分:0)

你需要获得一个调试器。目前还不清楚QCWWAN2kEnumerateDevices是否为您的设备分配内存。如果没有(我怀疑它,知道Win32API)你的

  

BYTE设备;

应该是

struct DEVICE_ARRAY_ELEM {
char devID[256];
char devKey[16];
};
DEVICE_ARRAY_ELEM *pDevices = malloc(sizeof(DEVICE_ARRAY_ELEM) * 10);
ULONG devicesArray = QCWWAN2kEnumerateDevices(&numDevices, (pDevices);
//Do stuff
free((void *)pDevices);

编辑___抱歉这是C,这里是C ++

struct DEVICE_ARRAY_ELEM {
char devID[256];
char devKey[16];
};
DEVICE_ARRAY_ELEM *pDevices = new DEVICE_ARRAY_ELEM[10];
ULONG devicesArray = QCWWAN2kEnumerateDevices(&numDevices, pDevices);
//do stuff
delete [] pDevices;

访问使用:

pDevices[devnum].devID[IDIndex];

答案 1 :(得分:0)

改进John Silver的回答

// IN A HEADER:
typedef struct DEVICE_ARRAY_ELEM {
    char devID[256];
    char devKey[16];
} DEVICE_ARRAY_ELEM; //  This defines a struct to hold the data brought back
// it also type defs 'struct DEVICE_ARRAY_ELEM' to 'DEVICE_ARRAY_ELEM' for convienence

// IN YOUR CODE:
// This pointer should be wrapped in a auto_ptr to help with RAII
DEVICE_ARRAY_ELEM *pDevices = new DEVICE_ARRAY_ELEM[10]; // allocate 10 elements in-line
ULONG errorCode = QCWWAN2kEnumerateDevices(&numDevices, (BYTE*)pDevices); // get them

// Here is the hard part: iterating over the array of devices returned
// as per the spec numDevices is now the number of devices parsed
for(int i = 0; i < numDevices; i++) {
   printf("%s\n", pDevices[i].devID); // is the name of the device (a character array)
}

delete [] pDevices;

修改

我现在使用numDevices迭代数组,因为规范说这是函数调用后枚举的设备数

再次编辑

以下是根据我的假设运作的代码:IDEONE

代码中有一些typedef以及我认为QCWWAN2kEnumerateDevices运作的定义。所以应该忽略这些,但代码编译并按预期执行