Возможно ли передать данные динамического мас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;
}
Смотрите, Вы пытаетесь отобразить в вирутальную память объект, имеющий тип std::vector <myObject>
. Даже не зная реализации myObject
, исключительно по наличию std::vector
можно сказать, что это провальное дело - в реализации вектора не обошлось без указателей, а как уже выше было справедливо замечено @VladD:
указатели передавать нельзя (они в чужом адресном пространстве не имеют смысла)
Но возможно, мы даже до этого и не дойдем: у нас просто не получится восстановить структуру вектора. Это тоже самое что взять и сериализовать объект класса, который является производным от другого класса - массив байтов мы получим, но как восстановим данные о таблице виртуальных ф-ий, например? Видимо, никак :) Если я ошибаюсь - буду только рад услышать опровергающие вышесказанное факты.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Внутри квадратных скобок в определении лямбда-функции можно задать переменные из внешнего контекста, которые нужны для работы этой лямбда...
У меня есть строка "\u0410\u0410 1000 \u0410\u0410", это ответ с сервераМне нужно конвертировать ее, чтобы исходная срока имела вид: АА 1000 АА
Надо обойти все вершины графа в любом порядкеЧто лучше использовать: поиск в ширину или в глубину? Какие преимущества и недостатки у алгоритмов...