他人の空似自作物置場

AppContainerUtils.zip/TestSharedMemory2/ExampleApp/ExampleApp.cpp


#include <iostream>
#include <sstream>
#include <string>

#include <Windows.h>

#include "../TestSharedMemory/SharedStruct.h"

bool CreateSharedMemory(void *&ptr, const wchar_t * const name, const unsigned int size) {
  HANDLE handle = ::CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, name);
  if (handle == NULL) {
    return false;
  }
  ptr = ::MapViewOfFile(handle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  if (ptr == NULL) {
    return false;
  }
  return true;
}

int main(const unsigned int argc, const char * const * const argv) {
  std::locale::global(std::locale("japanese"));
  void * ptr;
  const wchar_t * const sharedMemoryName = L"AppConteinerTestMemory";
  if (!CreateSharedMemory(ptr, sharedMemoryName, sizeof(SharedStruct))) {
    std::wcout << L"Error: 共有メモリーの生成に失敗しました" << std::endl;
    std::wcin.ignore();
    return 1;
  }
  SharedStruct &sharedStruct = *reinterpret_cast<SharedStruct *>(ptr);
  while (true) {
    std::wstring cmd;
    std::wcin >> cmd;
    if (cmd == L"exit") {
      break;
    }
    std::wistringstream wiss(cmd);
    unsigned int value;
    wiss >> value;
    sharedStruct.value = value;
    sharedStruct.changeFlag = true;
  }
  return 0;
}