{"id":507,"date":"2013-12-09T21:14:54","date_gmt":"2013-12-10T01:14:54","guid":{"rendered":"http:\/\/templesystems.com\/?page_id=507"},"modified":"2013-12-09T21:14:54","modified_gmt":"2013-12-10T01:14:54","slug":"memory-mapped-file","status":"publish","type":"page","link":"https:\/\/templesystems.com\/?page_id=507","title":{"rendered":"Memory Mapped File"},"content":{"rendered":"<p><span style=\"font-size: 9.5pt; font-family: Consolas; color: blue;\">#include<\/span><span style=\"font-size: 9.5pt; font-family: Consolas;\"> <span style=\"color: #a31515;\">&lt;string&gt;<\/span><\/span><\/p>\n<div class=\"WordSection1\">\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span class=\"GramE\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: blue;\">using<\/span><\/span><span style=\"font-size: 9.5pt; font-family: Consolas;\"> <span style=\"color: blue;\">namespace<\/span><br \/>\n<span class=\"SpellE\">std<\/span>;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">\/**************************************************************************************************<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\">CMemMapFile<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"mso-tab-count: 1;\">\u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">A\u00a0<\/span><span style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">Class to store a structure in a memory mapped file.<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>The\u00a0purpose for using a memory mapped file is to cross process boundaries.<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">\u00a0<\/span><span style=\"mso-tab-count: 1;\">\u00a0 \u00a0 \u00a0\u00a0<\/span><span style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">This\u00a0<\/span><span style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">simple class only has a constructor, destructor, and <\/span><span class=\"SpellE\" style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">accessor<\/span><span style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">.<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">\u00a0<\/span><span style=\"mso-tab-count: 1;\">\u00a0 \u00a0 \u00a0 <\/span><span style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">Use\u00a0<\/span><span style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">is as follows:<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span class=\"SpellE\"><span class=\"GramE\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\">struct<\/span><\/span><\/span><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"> <span class=\"SpellE\">MyDataStruct<\/span><span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>\/\/ this could also be &#8220;class <span class=\"SpellE\">MyDataStruct<\/span>&#8220;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\">{<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\"><span class=\"GramE\">int<\/span><\/span> x;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\"><span class=\"GramE\">int<\/span><\/span> y;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\">}<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span class=\"SpellE\"><span class=\"GramE\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\">SomeFunctionThatNeedsMemoryMappedData<\/span><\/span><\/span><span class=\"GramE\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\">()<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\">{<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\">\/\/ create the data file<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\">CMemMapFile<\/span>&lt;<span class=\"SpellE\">MyDataStruct<\/span>&gt; <span class=\"SpellE\"><span class=\"GramE\">myData<\/span><\/span><span class=\"GramE\">(<\/span>_T(&#8220;<span class=\"SpellE\">MyFunctionsMemoryMappedDataFile<\/span>&#8220;));<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">\/\/ use the data file<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"GramE\">if(<\/span><span class=\"SpellE\">myData<\/span>)<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>{<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 2;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\"><span class=\"GramE\">myData<\/span><\/span>-&gt;x = 5;<span style=\"mso-tab-count: 3;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span>\/\/ assign, which stores to <span class=\"SpellE\">mem<\/span> mapped file<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 2;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\"><span class=\"GramE\">myData<\/span><\/span>-&gt;y = 5;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 2;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\"><span class=\"GramE\">cout<\/span><\/span> &lt;&lt; <span class=\"SpellE\">myData<\/span>-&gt;x;<span style=\"mso-tab-count: 2;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>\/\/ access data (from <span class=\"SpellE\">mem<\/span> mapped file)<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 2;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\"><span class=\"GramE\">cout<\/span><\/span> &lt;&lt; <span class=\"SpellE\">myData<\/span>-&gt;y;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>}<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"GramE\">else<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\"><span style=\"mso-tab-count: 2;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\"><span class=\"GramE\">cout<\/span><\/span> &lt;&lt; &#8220;Construction\u00a0of <span class=\"SpellE\">myData<\/span> failed!!&#8221;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">\/\/ destructor will get called when <\/span><span class=\"SpellE\" style=\"color: green; font-family: Consolas; font-size: 9.5pt;\">myData<\/span><span style=\"color: green; font-family: Consolas; font-size: 9.5pt;\"> goes out of scope, and get rid of file<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\">}<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: green;\">**************************************************************************************************\/<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">\u00a0<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span class=\"GramE\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: blue;\">template<\/span><\/span><span style=\"font-size: 9.5pt; font-family: Consolas;\"> &lt;<span style=\"color: blue;\">class\u00a0<\/span>T&gt;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span class=\"GramE\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: blue;\">class<\/span><\/span><span style=\"font-size: 9.5pt; font-family: Consolas;\"> <span class=\"SpellE\">CMemMapFile<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">{<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span class=\"GramE\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: blue;\">public<\/span><\/span><span style=\"font-size: 9.5pt; font-family: Consolas;\">:<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\"><span class=\"GramE\">CMemMapFile<\/span><\/span><span class=\"GramE\">(<\/span><span class=\"SpellE\">wstring<\/span> Name);<span style=\"mso-tab-count: 6;\">\u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: green;\">\/\/ must construct with a name<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>~<span class=\"SpellE\"><span class=\"GramE\">CMemMapFile<\/span><\/span><span class=\"GramE\">(<\/span>);<span style=\"mso-tab-count: 9;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<\/span><span style=\"color: green;\">\/\/ destructor<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>T*<span style=\"mso-tab-count: 2;\">\u00a0<\/span><span style=\"color: blue;\">operator<\/span>&#8211;<span class=\"GramE\">&gt;(<\/span>) { <span style=\"color: blue;\">return<\/span> <span class=\"SpellE\">m_pData<\/span>; }<span style=\"mso-tab-count: 2;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span style=\"color: green;\">\/\/ access data with pointer operator e.g. <span class=\"SpellE\">myData<\/span>-&gt;x = 5;<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"GramE\"><span style=\"color: blue;\">operator<\/span><\/span> <span class=\"SpellE\"><span style=\"color: blue;\">bool<\/span><\/span>() { <span style=\"color: blue;\">return\u00a0<\/span><span class=\"SpellE\">m_hFile<\/span> &amp;&amp; <span class=\"SpellE\">m_pData<\/span>;\u00a0}<span style=\"mso-tab-count: 1;\">\u00a0 <\/span><span style=\"color: green;\">\/\/ test for\u00a0validity <span class=\"SpellE\">e.g<\/span> if(<span class=\"SpellE\">myData<\/span>)&#8230;<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span class=\"GramE\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: blue;\">private<\/span><\/span><span style=\"font-size: 9.5pt; font-family: Consolas;\">:<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>HANDLE<span style=\"mso-tab-count: 3;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\">m_hFile<\/span>;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>T*<span style=\"mso-tab-count: 4;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\">m_pData<\/span>;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">};<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">\u00a0<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span class=\"GramE\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: blue;\">template<\/span><\/span><span style=\"font-size: 9.5pt; font-family: Consolas;\"> &lt;<span style=\"color: blue;\">class\u00a0<\/span>T&gt;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span class=\"SpellE\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">CMemMapFile<\/span><\/span><span style=\"font-size: 9.5pt; font-family: Consolas;\">&lt;T&gt;:<span class=\"GramE\">:<span class=\"SpellE\">CMemMapFile<\/span><\/span>(<span class=\"SpellE\">wstring<\/span> Name)<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">{<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\">m_hFile<\/span> = NULL;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\">m_pData<\/span> = NULL;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"GramE\"><span style=\"color: blue;\">if<\/span>(<\/span><span class=\"SpellE\">Name.length<\/span>()\u00a0== 0)<\/span><span style=\"mso-tab-count: 2;\">\u00a0<\/span><span class=\"GramE\" style=\"font-family: Consolas; font-size: 9.5pt;\"><span style=\"color: blue;\">return<\/span><\/span><span style=\"font-family: Consolas; font-size: 9.5pt;\">;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\">m_hFile<\/span> = <span class=\"SpellE\">CreateFileMapping<\/span>(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, <span class=\"SpellE\"><span class=\"GramE\"><span style=\"color: blue;\">sizeof<\/span><\/span><\/span><span class=\"GramE\">(<\/span>T), <span class=\"SpellE\">Name.c_str<\/span>());<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"GramE\"><span style=\"color: blue;\">if<\/span><\/span> (<span class=\"SpellE\">m_hFile<\/span>)<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>{<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 2;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\">m_pData<\/span> = (T*) <span class=\"SpellE\"><span class=\"GramE\">MapViewOfFile<\/span><\/span><span class=\"GramE\">(<\/span><span class=\"SpellE\">m_hFile<\/span>, FILE_MAP_READ |\u00a0FILE_MAP_WRITE, 0, 0, 0);<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 2;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"GramE\"><span style=\"color: blue;\">if<\/span><\/span> (!<span class=\"SpellE\">m_pData<\/span>)<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 3;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\"><span class=\"GramE\">CloseHandle<\/span><\/span><span class=\"GramE\">(<\/span><span class=\"SpellE\">m_hFile<\/span>);<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>}<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">}<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">\u00a0<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span class=\"GramE\"><span style=\"font-size: 9.5pt; font-family: Consolas; color: blue;\">template<\/span><\/span><span style=\"font-size: 9.5pt; font-family: Consolas;\"> &lt;<span style=\"color: blue;\">class\u00a0<\/span>T&gt;<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span class=\"SpellE\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">CMemMapFile<\/span><\/span><span style=\"font-size: 9.5pt; font-family: Consolas;\">&lt;T&gt;:<span class=\"GramE\">:~<\/span><span class=\"SpellE\">CMemMapFile<\/span>()<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">{<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"GramE\"><span style=\"color: blue;\">if<\/span>(<\/span><span class=\"SpellE\">m_pData<\/span>)<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 2;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\"><span class=\"GramE\">UnmapViewOfFile<\/span><\/span><span class=\"GramE\">(<\/span><span class=\"SpellE\">m_pData<\/span>);<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 1;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"GramE\"><span style=\"color: blue;\">if<\/span>(<\/span><span class=\"SpellE\">m_hFile<\/span>)<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\"><span style=\"mso-tab-count: 2;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"SpellE\"><span class=\"GramE\">CloseHandle<\/span><\/span><span class=\"GramE\">(<\/span><span class=\"SpellE\">m_hFile<\/span>);<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">}<\/span><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;\"><span style=\"font-size: 9.5pt; font-family: Consolas;\">\u00a0<\/span><\/p>\n<p class=\"MsoNormal\">\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>#include &lt;string&gt; using namespace std; \/************************************************************************************************** \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CMemMapFile \u00a0 \u00a0 \u00a0 \u00a0A\u00a0Class to store a structure in a memory mapped file. \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 The\u00a0purpose for using a memory mapped file is to cross process boundaries. \u00a0\u00a0 \u00a0 \u00a0\u00a0This\u00a0simple class only has &hellip; <a href=\"https:\/\/templesystems.com\/?page_id=507\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":303,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-507","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/templesystems.com\/index.php?rest_route=\/wp\/v2\/pages\/507","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/templesystems.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/templesystems.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/templesystems.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/templesystems.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=507"}],"version-history":[{"count":4,"href":"https:\/\/templesystems.com\/index.php?rest_route=\/wp\/v2\/pages\/507\/revisions"}],"predecessor-version":[{"id":511,"href":"https:\/\/templesystems.com\/index.php?rest_route=\/wp\/v2\/pages\/507\/revisions\/511"}],"up":[{"embeddable":true,"href":"https:\/\/templesystems.com\/index.php?rest_route=\/wp\/v2\/pages\/303"}],"wp:attachment":[{"href":"https:\/\/templesystems.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}