2016-10-14 57 views
0

如果pMapMen的長度是7個元素,我將如何一次傳遞多個元素。下面的代碼傳遞一個元素。如何將一個數組傳遞給Windows中的共享內存c/C++

//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); 
+0

您是否嘗試創建多個映射視圖?一種常見的方法是對所有映射的內存使用單個結構(可能包含其他結構,數組,元素等),這些內存只需要一個基本指針用於每個進程。 – rcgldr

回答

0

假設你的文件只包含NUM_ELEM元素的數組,其類型爲myelement_t結構,你可以做這樣的事情:

#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個元素的長度

+0

我的數組只有整數,我把它作爲int * pMapMem [7]; – Gozmit

+0

int * pMapMem [7];沒有聲明一個整數數組。它是一個由7個指針組成的數組(整數)。 – GPS

+0

是的,我有點迷路。你的例子是C++嗎? – Gozmit

相關問題