Ребята помогите, или направьте на путь истинный... Вобщем пишу консольное приложение на VirtualPascale (ОС Windows 2003 Server). Требуется чтобы два экземпляра одного процесса обменивались между собой данными. Итак запускаю 1-й экземпляр, и создаю в нем разделяемую память: hApi:=CreateFileMapping(-1,Nil,PAGE_READWRITE,0,SizeOf(ROuts),ApiName) ; Api:=MapViewOfFile(hApi,FILE_MAP_ALL_ACCESS,0,0,SizeOf(RApi)); пока все ОК. Теперь запускаю 2-й экземпляр, и в нем получаю доступ к созданной памяти: hApi:=OpenFileMapping(PAGE_READWRITE,false,ApiName); Api:=MapViewOfFile(hApi,FILE_MAP_ALL_ACCESS,0,0,SizeOf(RApi)); 1-й строка выполняется без проблем, возвращает дескриптор области, а вот вторая дает ошибку GetLastError=5 - доступ запрещен. Если вместо FILE_MAP_ALL_ACCESS поставить FILE_MAP_READ или FILE_MAP_COPY, все работает нормально, НО мне ведь надо чтобы оба экземпляра могли писать в разделяемую память !!! Рассудите ?
Homesad Richter пример в главе 17 MMFShare Код (Text): ... s_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4*1024, TEXT("MMFSharedData")); pView = MapViewOfFile(s_hFileMap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0); ... hFileMapT = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, FALSE, TEXT("MMFSharedData")); pView = MapViewOfFile(hFileMapT, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0); ...
Написал все точно так как указали - все равно не работает! Первые три строчки выполняются без проблем, а после последней как и было GetLastError = 5. Оставляешь только FILE_MAP_READ - все работает, а с FILE_MAP_WRITE - никак. Я почему здесь то и стал задавать вопросы, потому-что вроде написал все как указано в документах, а не работает. Может все дело в том что у меня Windows 2003 Server ? Может надо указывать там какие-нибудь атрибуты защиты, или может это глюк Virtual Pascal, вобщем я в замешательстве. Это у меня первые пробы писать приложения под WIndows, может подскажете какой-нибудь другой способ, доступа к общим переменным из разных процессов ?