Проблемы с разделяемой памятью

Тема в разделе "WASM.WIN32", создана пользователем Homesad, 2 фев 2005.

  1. Homesad

    Homesad New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2005
    Сообщения:
    2
    Адрес:
    Russia
    Ребята помогите, или направьте на путь истинный...

    Вобщем пишу консольное приложение на 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, все работает нормально,

    НО мне ведь надо чтобы оба экземпляра могли писать в

    разделяемую память !!!

    Рассудите ?
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Homesad

    Richter пример в главе 17 MMFShare
    Код (Text):
    1. ...
    2. s_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
    3.                0, 4*1024, TEXT("MMFSharedData"));
    4. pView = MapViewOfFile(s_hFileMap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
    5. ...
    6. hFileMapT = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, FALSE,
    7.               TEXT("MMFSharedData"));
    8. pView = MapViewOfFile(hFileMapT, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
    9. ...
     
  3. Homesad

    Homesad New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2005
    Сообщения:
    2
    Адрес:
    Russia
    Написал все точно так как указали - все равно не работает!



    Первые три строчки выполняются без проблем, а после

    последней как и было GetLastError = 5.

    Оставляешь только FILE_MAP_READ - все работает, а с

    FILE_MAP_WRITE - никак.

    Я почему здесь то и стал задавать вопросы, потому-что

    вроде написал все как указано в документах, а не работает.

    Может все дело в том что у меня Windows 2003 Server ?

    Может надо указывать там какие-нибудь атрибуты защиты,

    или может это глюк Virtual Pascal, вобщем я в

    замешательстве.

    Это у меня первые пробы писать приложения под WIndows,

    может подскажете какой-нибудь другой способ, доступа к

    общим переменным из разных процессов ?