На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Quick View Execution and Error Conditions



The lifetime of each instance of the Quick View program consists of the following steps:

1. When the user chooses the Quick View or Print command, the shell starts an instance of QUIKVIEW.EXE for each selected file (by using the Win32 CreateProcess or WinExec function). The shell may specify a show command, and Quick View passes the command to the file viewer. The command-line argument that the shell passes to Quick View has the following options.

Option Meaning
-f:pathname Path of the file to view or print. Universal Naming Convention (UNC) filenames are allowed. If this option is not specified, Quick View terminates without displaying any messages.
-v File to be opened for viewing in the file viewer. If this option is specified, Quick View ignores all of the options described below. This is the default option in the absence of both -v and -p.
-d Quick View and the file viewer to suppress all user interface (UI) elements if -p is also specified. Quick View suppresses any error messages, and the file viewer should not display any dialog boxes for printing. Quick View ignores this option in the absence of -p.
-p File to be opened for printing. If -v is also present, Quick View ignores this option.
-&:pathname Printer driver to use to print the file. Quick View ignores this option in the absence of -p. If -p is present but -& is not, Quick View instructs the file viewer to use the default printer driver.


2. Quick View starts and checks for a path on the command line. If there is no path, the user has attempted to start Quick View by itself and the program immediately terminates without displaying any messages.
3. Quick View parses the filename extension from the path given in the -f option. If no filename extension is given, Quick View proceeds to stage E1 (error condition 1). Otherwise, Quick View uses the following procedure to find a file viewer class identifier associated with the given filename extension.

a. Quick View attempts to open the HKEY_CLASS_ROOT\QuickView\extension key, where extension is parsed from the path.

i. If the filename extension maps to a type such as HKEY_CLASS_ROOT\extension = typename and there is a registry entry with the form HKEY_CLASS_ROOT\typename\QuickView = *, Quick View looks for file viewer class identifiers under HKEY_CLASS_ROOT\QuickView\*. If a key with the HKEY_CLASS_ROOT\*\QuickView = * form exists, the system attempts to use all the viewers listed under the "*" section.
ii. Otherwise, Quick View begins enumerating the file viewer class identifiers under the HKEY_CLASS_ROOT\QuickView\extension key. If the enumeration fails (that is, there is nothing in the registry to enumerate), Quick View closes the key and proceeds to stage E2. Otherwise, Quick View reads the first file viewer class identifier in the enumeration and proceeds to step 4.


b. If an error occurs in step 4, the enumeration continues until all file viewer class identifiers have been tried. If no file viewer is activated, Quick View closes the key from (a) and proceeds to stage E2.

4. Given a class identifier of a file viewer DLL, Quick View attempts to create an instance of a file viewer object of the given class by using the following procedure.

a. Quick View calls a function to create an instance of a file viewer object, specifying parameters that include the class identifier and the IID_IPersistFile interface identifier. This instructs OLE to load the DLL listed under the class identifier's InprocServer32 subkey, obtain an instance of the object from the DLL, and return an IPersistFile interface pointer to the object. If the instance cannot be created because of lack of memory, Quick View proceeds to stage E4. If it fails for some other reason, Quick View proceeds to stage E3. (Note that, because DLL objects are involved, any call to QueryInterface will not fail with REGDB_IID_NOTREG, which typically signals a corrupted registry. That error is generated only when LRPC proxies and stubs are involved.)

b. Given the IPersistFile interface pointer pIPersistFile, Quick View calls the Load member function of the IPersistFile interface, specifying the path of the file and the STGM_READ and STGM_SHARE_DENY_NONE values, which instruct the object to open the file for read access. If Load fails, Quick View calls the Release member function of pIPersistFile and proceeds to stage E4 if the error is due to a lack of memory. Otherwise, Quick View proceeds to stage E3.

c. Quick View obtains the file viewer object's IFileViewer interface by specifying the IID_IFileViewer interface identifier in a call to the QueryInterface member function of pIPersistFile. Quick View calls the Release member function of pIPersistFile, regardless of the outcome. If this call fails due to lack of memory, Quick View proceeds to stage E4. Otherwise, Quick View proceeds to stage E3.
d1. If the -v option was present or both the -v and -p options were absent, Quick View calls the ShowInitialize member function of pIFileViewer, which instructs the file viewer to load the file and perform any preshowing initialization that is prone to failure (including the creation of windows, the loading of resources, and so on). This is the file viewer's one chance to fail. If it fails, Quick View proceeds to stage E4 if the error is due to lack of memory or to stage E3 otherwise. If ShowInitialize succeeds, Quick View calls the Show member function of pIFileViewer, specifying the show command that was passed to Quick View's WinMain function. Show does not return until the user closes the file viewer, and it always returns NOERROR in that case. If Show is called before ShowInitialize, it returns E_UNEXPECTED.

d2. If the -p option was present (and the -v option was absent), Quick View calls the PrintTo member function of pIFileViewer specifying the path of the printer driver provided in the -& option (or NULL if -& was absent) and a value indicating if the -d option was present on the command line (UI suppression flag). PrintTo does not return until printing is complete or an error occurs. If an error occurs, the file viewer is responsible for notifying the user if the UI suppression flag is FALSE.

e. When Show or PrintTo returns (whichever was called in steps d1 or d2), Quick View calls the Release member function of pIFileViewer, regardless of the return value. If the file viewer successfully executed the IFileViewer::ShowInitialize member function, the Release member function will not fail. Release fails only if it is called before ShowInitialize. If PrintTo fails but the -d option was not specified on the command line, Quick View assumes that the file viewer displayed a message to indicate printing failed, and Quick View fails without displaying a message in that case. In any case, Quick View proceeds to step 5.

5. Quick View releases any interface pointers it may have had and calls OleUninitialize. Quick View then terminates normally.

Quick View may encounter these four error conditions (stages E1 through E4) during the lifetime of an instance.

E1. If Quick View fails to associate the path with a file viewer class identifier (using a filename extension), it displays this message.

There are no viewers for this type of file. Would you like to try the default viewers.


If the user clicks No, Quick View terminates. If the user clicks Yes, Quick View displays the Searching dialog box, enumerates all registered file viewers (regardless of file type or filename extension ), and attempts to have each one load and display the file. Quick View tries each file viewer of a given class identifier once. If no file viewer successfully displays the file, Quick View removes the Searching dialog box and displays this message.

Error opening or reading file.


When the user closes the dialog box, Quick View terminates.
E2. If Quick View successfully determines the file type but fails to enumerate any file viewers associated with the filename extension, it displays the Searching dialog box and attempts to have each registered viewer display the file, trying each file viewer class identifier once. If that fails, the Quick View removes the Searching dialog box and displays this message.

There are no viewers capable of viewing files.


When the user closes the dialog box, Quick View terminates.
E3. If Quick View successfully locates an initial file viewer but fails to view the file for any reason other than an out of memory condition, Quick View displays the Searching dialog box and continues enumerating viewers under the class identifier or filename extension key currently in use (steps 3d or 4c). If Quick View tries all viewers registered for the type unsuccessfully, processing continues as in stage E2 by trying all registered viewers regardless of registered type.

E4. If an out of memory condition occurs for one file viewer, it is likely that other viewers will not succeed either. In that case, Quick View displays a dialog box (using MB_ICONEXCLAMATION) with this message.

There is not enough memory to view or print . Quit one or more files or programs, and then try again.


A file viewer can return a number of error values to Quick View. When Quick View receives an error value, it displays an error message. Quick View recognizes the following error values.
FV_E_BADFILE ((HRESULT)0x8534E102L)
FV_E_EMPTYFILE ((HRESULT)0x8534E108L)
FV_E_FILEOPENFAILED ((HRESULT)0x8534E105L)
FV_E_INVALIDID ((HRESULT)0x8534E106L)
FV_E_MISSINGFILES ((HRESULT)0x8534E104L)
FV_E_NOFILTER ((HRESULT)0x8534E100L)
FV_E_NONSUPPORTEDTYPE ((HRESULT)0x8534E101L)
FV_E_NOVIEWER ((HRESULT)0x8534E10AL)
FV_E_OUTOFMEMORY ((HRESULT)0x8534E107L)
FV_E_PROTECTEDFILE ((HRESULT)0x8534E109L)
FV_E_UNEXPECTED ((HRESULT)0x8534E103L)


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Быстрое Выполнение Условий Вида и Ошибки



Целая жизнь каждого примера Быстрой программы Вида состоит из следующего шагов:

1. Когда потребитель выбирает Быстрый Вид или команду Отпечатка, оболочка начинает пример QUIKVIEW.EXE для каждой выбравшееся файл (используя Win32 CreateProcess или функция WinExec). Оболочка может определить команду показа, и Быстрый Вид передает команду файловому зрителю. Командная линия аргумента, что оболочка проходит в Быстрый Вид имеет следующие выборы.

Значение Выбора
-f:pathname Путь файла, чтобы рассматривать или печататься. Универсальные ОБОЗНАЧЕНИЯ (UNC) filenames допущены. Если этот выбор не определен, Быстрый Вид не завершает отображая любые сообщения.
-v Файл, который нужно открываться для просмотра в файловом зрителе. Если этот выбор определен, Быстрый Вид игнорирует все выборы описанные ниже. Это - встроенный выбор как при отсутствии -v так и -p.
-d Быстрый Вид и файловый зритель, чтобы подавлять весь интерфейс пользавателя элементов (UI) если -p также определен. Быстрый Вид подавляет любые сообщения ошибки, и файловый зритель не должен отображать любые диалоговые ящики для печати. Быстрый Вид игнорирует этот выбор при отсутствии -p.
-p Файл, который нужно открываться для печати. Если -v также присутствует, Быстрый Вид игнорирует этот выбор.
-&:pathname водитель Принтера, чтобы использоваться, чтобы печатать файл. Быстрый Вид игнорирует этот выбор при отсутствии -p. Если -p представляет но -& - нет, Быстрый Вид указывает файлового зрителя, чтобы использовать встроенного водителя принтера.


2. Быстрый Вид начинает и проверяет на наличие пути на командной линии. Если нет пути, потребитель попытался бы запускать Быстрый Вид самостоятельно и программа не немедленно завершает отображая любые сообщения.
3. Быстрые грамматические разборы Вида расширение filename из пути данного в -f выбор. Если никакое filename расширение не дано, Быстрые выручки Вида на этап E1 (условие ошибки 1). В противном случае, Быстрый Вид использует следующую процедуру, чтобы находить идентификатор класса файлового зрителя связанный данным filename расширением.

a. Быстрые попытки Вида, чтобы открывать ключ HKEY_CLASS_ROOT\QuickView\extension, где расширение разобрано из пути.

я. Если расширение filename отображается в тип как например, HKEY_CLASS_ROOT\extension = typename и есть вход регистрации с формой HKEY_CLASS_ROOT\typename\QuickView = *, Быстрый Вид выглядит идентификаторами класса файлового зрителя под HKEY_CLASS_ROOT\QuickView\*. Если ключ с HKEY_CLASS_ROOT\*\QuickView = * форма существует, система пытается использовать всех зрителей указанных под "*" секция.
ii. В противном случае, Быстрый Вид начинает перечислять идентификаторы класса файлового зрителя под ключом HKEY_CLASS_ROOT\QuickView\extension. Если перечисление терпит неудачу (то есть, есть ничто в регистрации, чтобы перечислять), Быстрый Вид закрывает ключ и приступает на этап E2. В противном случае, Быстрый Вид читает первый идентификатор класса файлового зрителя в перечислении и приступает в шаг 4.


b. Если ошибка происходит на этапе 4, перечисление остается пока всех идентификаторов класса файлового зрителя не пытаются. Если никакой файловый зритель не активизирован, Быстрые закрытия Вида ключ из (a) и выручки на этап E2.

4. Данный идентификатор класса файлового зрителя DLL, Быстрые попытки Вида, чтобы создавать пример файлового объекта зрителя данного класса используя следующую процедуру.

a. Быстрые вызовы Вида функция, чтобы создавать пример файлового зрителя объектное, определение параметров, которые включают идентификатор класса и идентификатор интерфейса IID_IPersistFile. Это указывает OLE, чтобы загружать DLL указанное под идентификатором класса InprocServer32 подключа, получать пример объекта из DLL и возвращать указатель интерфейса IPersistFile на объект. Если пример не может быть создан из-за недостатка памяти, Быстро Рассмотрен выручки на этап E4. Если это терпит неудачу по некоторой другой причине, Быстрым выручкам Вида на этап E3. (Отметьтесь, что, поскольку объекты DLL включены, любой вызов на QueryInterface не потерпит неудачу с REGDB_IID_NOTREG, которое обычно сигнализирует разврещенную регистрацию. Эта ошибка генерируется только когда полномочия LRPC и заглушки включены.)

b. Давшее указатель интерфейса IPersistFile pIPersistFile, Быстрые вызовы Вида функция члена Нагрузки интерфейса IPersistFile, определяющего путь файла и STGM_READ и величины STGM_SHARE_DENY_NONE, которые указывают объект против открытого файл для доступа чтения. Если Нагрузка терпит неудачу, Быстрые вызовы Вида функция члена Выпуска pIPersistFile и выручек на этап E4 если ошибка является следствием недостатка памяти. В противном случае, Быстрые выручки Вида на этап E3.

c. Быстрый Вид получает, файловый зритель объектный IFileViewer связывает определяя идентификатор интерфейса IID_IFileViewer на вызове в функцию члена QueryInterface pIPersistFile. Быстрые вызовы Вида функция члена Выпуска pIPersistFile, независимо от результата. Если этот вызов терпит неудачу из-за недостатка памяти, Быстрых выручек Вида на этап E4. В противном случае, Быстрые выручки Вида на этап E3.
d1. Если -v выбор представлял бы или как -v так и -p выборы отсутствовали, Быстрые вызовы Вида функция члена ShowInitialize pIFileViewer, которая указывает файлового зрителя, чтобы загружать файл и выполнять любую preshowing инициализацию, которая склонная в неудаче (включая создание окна, погрузка ресурсов, и так далее). Это - файл зритель один шанс, чтобы терпеть неудачу. Если это терпит неудачу, Быстрые выручки Вида на этап E4 если ошибка является следствием недостатка памяти или на этап E3 в противном случае. Если ShowInitialize добивается успеха, Быстрые вызовы Вида функция члена Показа pIFileViewer, определяющего, что показ приказывает, что был пройден в Быструю функцию Вида WinMain. Показ не возвращается пока потребитель не закроет файлового зрителя, и это всегда возвращает NOERROR в этом случае. Если Показ вызван перед ShowInitialize, он возвращает E_UNEXPECTED.

d2. Если -p выбор представлял бы (и -v выбор отсутствовал), Быстрые вызовы Вида функция члена PrintTo pIFileViewer, определяющего, что путь водителя принтера приводил в -& выбор (или НЕДЕЙСТВИТЕЛЬНЫЙ если -& отсутствовал бы) и указание величины если -d выбор присутствовал бы на командной линии (флаг подавления UI). PrintTo НЕ возвращается пока печать не будет завершенна или ошибка происходит. Если ошибка происходит, файловый зритель ответственный за уведомление потребителя если флаг подавления UI ЛОЖНЫЙ.

e. Когда Показ или возврат PrintTo (какой угодно был приглашен шаги d1 или d2), Быстрые вызовы Вида функция члена Выпуска pIFileViewer, независимо от обратной величины. Если файловый зритель успешно выполнял бы IFileViewer::функция члена ShowInitialize, функция члена Выпуска не потерпит неудачу. Выпуск терпит неудачу только если он вызван перед ShowInitialize. Если PrintTo терпит неудачу но -d выбор не был определен на командной линии, Быстрый Вид допускает что файловый зритель отображал сообщение, чтобы указывать печать неудачный, и Быстрый Вид не терпит неудачу отображая сообщение в этом случае. В любом случае, Быстрые выручки Вида в шаг 5.

5. Быстрые выпуски Вида любые указатели интерфейса это может имело и вызовы OleUninitialize. Быстро Рассмотрите затем завершайтесь нормально.

Быстрый Вид может столкнуться с этими четырьмя условиями ошибки (этапы E1 через E4) в течение целой жизни примера.

E1. Если Быстрый Вид не соединяет путь с идентификатором класса файлового зрителя (использование расширения filename), это отображает это сообщение.

Нет зрителей для этого типа файла. Вы полюбите ли пробовать встроенных зрителей.


Если щелчки потребителя No, Быстрый Вид завершается. Если потребитель щелкает Да, Быстрый Вид отображает диалоговый ящик Поиска, перечисляет все зарегистрировавшие файловых зрителей (независимо от файлового типа или filename расширения ), и попытки, чтобы иметь каждую нагрузку и отображать файл. Быстрый Вид пробует каждого файлового зрителя данного идентификатора класса как только. Если никакой файловый зритель успешно не отображает файл, Быстрые удаления Вида Поиск диалога боксирует и отображает это сообщение.

Открытие Ошибки или чтения файла.


Когда потребитель закрывает диалоговый ящик, Быстрый Вид завершается.
E2. Если Быстрый Вид успешно определяет файловый тип но не перечисляет любых файловых зрителей связанных расширением filename, он отображает диалоговый ящик Поиска и пытается иметь каждого зарегистрированного зрителя отображать файл, пробующий каждый идентификатор класса файлового зрителя как только. Если это терпит неудачу, Быстрый Вид удаляет Поиск диалога боксировать и отображает это сообщение.

Нет зрителей способных рассматривать <человеческий-удобочитаемый тип документа> файлы.


Когда потребитель закрывает диалоговый ящик, Быстрый Вид завершается.
E3. Если Быстрый Вид успешно располагает начального файлового зрителя но не просматривает файл по любой причине кроме условия out of памяти, Быстрый Вид отображает что Поиск диалога боксирует и продолжает перечислять зрителям под идентификатором класса или filename ключа расширения к настоящему времени в использовании (шаги 3d или 4c). Если Быстрый Вид пробует всех зрителей зарегистрированных для типа безуспешно, обработка продолжает как на этапе E2 пытаясь все зарегистрированные зрители независимо от зарегистрированного типа.

E4. Если условие out of памяти происходит для одного файлового зрителя, похоже, что другие зрители не получит также. В этом случае, Быстрый Вид отображает диалоговый ящик (использование MB_ICONEXCLAMATION) с этим сообщением.

Нет достаточно памяти, чтобы рассматривать или печатать . Покиньте один или более файлов или программ, затем пытайтесь снова.


Файловый абонент может возвращать множество величин ошибки, чтобы Быстро Рассматриваться. Когда Быстрые приемники Вида величина ошибки, это отображает сообщение ошибки. Быстрый Вид признает следующие величины ошибки.
FV_E_BADFILE ((HRESULT)0x8534E102L) FV_E_EMPTYFILE ((HRESULT)0x8534E108L) FV_E_FILEOPENFAILED ((HRESULT)0x8534E105L) FV_E_INVALIDID ((HRESULT)0x8534E106L) FV_E_MISSINGFILES ((HRESULT)0x8534E104L) FV_E_NOFILTER ((HRESULT)0x8534E100L) FV_E_NONSUPPORTEDTYPE ((HRESULT)0x8534E101L) FV_E_NOVIEWER ((HRESULT)0x8534E10AL) FV_E_OUTOFMEMORY ((HRESULT)0x8534E107L) FV_E_PROTECTEDFILE ((HRESULT)0x8534E109L) FV_E_UNEXPECTED ((HRESULT)0x8534E103L)


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz