1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Расшарить метафайл.

Тема в разделе "Программирование", создана пользователем Digger, 18.03.06.

  1. Digger

    Digger Активный участник

    3.669
    1
    Кзаалось бы, проще некуда:

    hFile=CreateFile("1234.emf", GENERIC_READ, FILE_SHARE_READ, NULL,
    OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
    hMapping=CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, "gg");
    hMapping=OpenFileMapping(FILE_MAP_READ, FALSE, "gg");
    HDC hdc = CreateDC("DISPLAY", NULL, NULL, NULL);
    PlayMetaFile(hdc,hMapping);
    DeleteDC(hdc);

    Но не работает.

    Причём отдельно всё работает - если метафайл открыть так:

    hMapping=GetMetaFile("1234.emf");
    PlayMetaFile(hdc,hMapping);

    ..,то всё прекрасно рисуется.
    Можно вместо метафайла отобразить в память текстовый файл, и через

    Data=MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
    S1=LPSTR(malloc(100));
    memcpy(S1, Data, 100);
    SetWindowText(hStatic, S1);
    free(S1);

    ...посмотреть его содержимое, то есть отображение как таковое тоже работает.

    Видимо ф-ции PlayMetaFile не нравится формат хэндлера hMapping, возвращаемого ф-ей OpenFileMapping..

    Или я в другом месте дурак?
     
  2. Гость

    Гость Гость

    Много лет назад, когда минута роуминга стоила несусветные деньги, а у меня их было мало, я в другом городе пытался "подключить сим-карту" из Волгограда, упирая на то, что сим-карта любого оператора в точности такая же, как и у всякого другого. И что проблем быть не может. На что мне резонно отвечали, что по размеру-то они одинаковы, никто не спорит, но вот микрокод, знаете ли... не получится изменить.

    HANDLE в Win32 - это целое семейство дескрипторов (индексов в таблицах размещений системных объектов). Вы получаете описатель (число) в неизвестно какой внутренней таблице размещения отображений и пытаетесь этот же описатель скормить функции отображения wmf. Разумеется, этот описатель может подойти чисто случайно с вероятностью, которой не бывает в работающих системах.

    Как SIM-карту нельзя "подключить в другом городе", так и дескриптор иного смысла не подойдёт в функции, в которой ожидается дескриптор совсем не такого смысла.