#c
#c
Вопрос:
Если pMapMen имеет длину 7 элементов, как мне передавать более одного элемента за раз. Приведенный ниже код передает один элемент.
//Create memory mapped file - pMapMem
pMapMem[1] = (int*)MapViewOfFile(
hMap, // Handle to map object
FILE_MAP_ALL_ACCESS, // Read/Write permisssion
0,
0,
BYTES_TO_MAP);
Комментарии:
1. Вы пытаетесь создать несколько отображенных представлений? Распространенным методом является использование одной структуры (которая может содержать другие структуры, массивы, элементы, …) для всей отображенной памяти, для чего потребуется только один базовый указатель для каждого процесса.
Ответ №1:
Предполагая, что ваш файл содержит только массив NUM_ELEM
элементов, а их тип — myelement_t
struct , вы могли бы сделать что-то вроде этого:
#define BYTES_TO_MAP (NUM_ELEM * sizeof(myelement_t))
myelement_t *elem;
void *mmapped = MapViewOfFile(
hMap, // Handle to map object
FILE_MAP_ALL_ACCESS, // Read/Write permisssion
0,
0,
BYTES_TO_MAP);
if(NULL != mmapped) {
elem = (myelement_t *) mmapped;
for(i= 0; i < NUM_ELEM; i ) {
printelem(elem[i]);
}
}
Если ваш код передает только 1 элемент, то это, вероятно, потому, что вы сопоставили только 1 элемент, т.Е. BYTES_TO_MAP
Равен длине 1 элемента
Комментарии:
1. В моем массиве есть только целые числа, я определяю его как int *pMapMem[7];
2. int *pMapMem[7]; не объявляет массив целых чисел. Это массив из 7 указателей (на целые числа).
3. Да, я немного растерялся. Является ли ваш пример c ?
4. @Gozmit — примером является код на языке Си. В вашем случае измените myelement_t на int. printelem() может быть любой созданной вами функцией, или вы можете просто использовать printf .