Функция передачи данных между двумя прoграммами. std::vector в функции CopyMemory

326
01 мая 2017, 03:29

Возможно ли передать данные динамического масcива std:vector из одной программы в другую функцией CopyMemory? Так чтобы вторая программа видела и имела доступ к классам и обьектам первой программы. pBuf второй программы показывает размер массива "size 3", но данные обьектов внутри массива пустые, пишет "Unable to read memory".

1 программа:

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include "myObject.h"
#define BUF_SIZE 256
TCHAR szName[] = TEXT("Global\\MyFileMappingObject");
typedef std::vector <myObject> Vec;
INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nShowCmd)
{
    HANDLE hMapFile;
    Vec *pBuf;
    Vec pA;
    Vec * pntrA;
    myObject pB;
    myObject pC;
    myObject pD;    
    hMapFile = CreateFileMapping(
        INVALID_HANDLE_VALUE,    // use paging file
        NULL,                    // default security
        PAGE_READWRITE,          // read/write access
        0,                       // maximum object size (high-order DWORD)
        BUF_SIZE,                // maximum object size (low-order DWORD)
        szName);                 // name of mapping object
    pBuf = (Vec*)MapViewOfFile(hMapFile,   // handle to map object
        FILE_MAP_ALL_ACCESS, // read/write permission
        0,
        0,
        BUF_SIZE);
    pC.data[0] = 0.11141112;
    pA.push_back(pC);
    pA.push_back(pB);
    pA.push_back(pD);
    pntrA = &pA;
    CopyMemory((PVOID)pBuf, pntrA, 256);
    _getch();   
    return 0;
}

2 программа:

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include "myObject.h"
#pragma comment(lib, "user32.lib")
#define BUF_SIZE 256
TCHAR szName[] = TEXT("Global\\MyFileMappingObject");
typedef std::vector <myObject> Vec;
INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nShowCmd)
{
    HANDLE hMapFile;
    Vec *pBuf;
    hMapFile = OpenFileMapping(
        FILE_MAP_ALL_ACCESS,   // read/write access
        FALSE,                 // do not inherit the name
        szName);               // name of mapping object

    pBuf = (Vec*)MapViewOfFile(hMapFile, // handle to map object
        FILE_MAP_ALL_ACCESS,  // read/write permission
        0,
        0,
        BUF_SIZE);
    return 0;
}
Answer 1

Смотрите, Вы пытаетесь отобразить в вирутальную память объект, имеющий тип std::vector <myObject>. Даже не зная реализации myObject, исключительно по наличию std::vector можно сказать, что это провальное дело - в реализации вектора не обошлось без указателей, а как уже выше было справедливо замечено @VladD:

указатели передавать нельзя (они в чужом адресном пространстве не имеют смысла)

Но возможно, мы даже до этого и не дойдем: у нас просто не получится восстановить структуру вектора. Это тоже самое что взять и сериализовать объект класса, который является производным от другого класса - массив байтов мы получим, но как восстановим данные о таблице виртуальных ф-ий, например? Видимо, никак :) Если я ошибаюсь - буду только рад услышать опровергающие вышесказанное факты.

READ ALSO
Список захвата в лямбда-функциях: есть ли смысл захватывать все переменные?

Список захвата в лямбда-функциях: есть ли смысл захватывать все переменные?

Внутри квадратных скобок в определении лямбда-функции можно задать переменные из внешнего контекста, которые нужны для работы этой лямбда...

369
SDL2 полностью статическая линковка. (MVS)

SDL2 полностью статическая линковка. (MVS)

1Я гружу с официального сайта код SDL 2

382
Как конвертировать символы unicodе в буквы русского алфавита

Как конвертировать символы unicodе в буквы русского алфавита

У меня есть строка "\u0410\u0410 1000 \u0410\u0410", это ответ с сервераМне нужно конвертировать ее, чтобы исходная срока имела вид: АА 1000 АА

387
Поиск в ширину или поиск в глубину

Поиск в ширину или поиск в глубину

Надо обойти все вершины графа в любом порядкеЧто лучше использовать: поиск в ширину или в глубину? Какие преимущества и недостатки у алгоритмов...

255