他人の空似自作物置場

AppContainerUtils.zip/TestSharedMemory1/ExampleApp/ExampleApp.cpp


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

#include <Windows.h>

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

bool CreateSharedMemory(void *&ptr, const HANDLE handle) {
  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"));
  if (argc != 2) {
    std::wcout << "usage: ExampleApp.exe shared_memory_handle" << std::endl;
    return 1;
  }
  std::istringstream iss(argv[1]);
  unsigned int handleImpl;
  iss >> handleImpl;
  const HANDLE handle = reinterpret_cast<HANDLE>(handleImpl);
  void * ptr;
  if (!CreateSharedMemory(ptr, handle)) {
    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;
}