|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Creating a Briefcase Reconciler
You create a briefcase reconciler by implementing the reconciliation interfaces. At a minimum, a reconciler implements the IReconcilableObject interface and the IPersistStorage or IPersistFile interface. As the initiator, the Briefcase determines when reconciliation is needed and calls the IReconcilableObject::Reconcile member function to initiate reconciliation.
Although the Reconcile member function can provide a wide-ranging set of reconciliation capabilities, a briefcase reconciler carries out only minimal reconciliation in most cases. In particular, the Briefcase does not require the reconciler to support residue generation or to support the termination object. Also, the reconciler carries out a single top to bottom reconciliation and must not return the REC_E_NOTCOMPLETE value; that is, it should not attempt partial reconciliation.
The Briefcase provides the IReconcileInitiator interface. The briefcase reconciler can use the IReconcileInitiator::SetAbortCallback member function to set the termination object. The Briefcase does not use version identifiers and can, therefore, not provide previous versions of a document if a reconciler requests them using the corresponding member functions in IReconcileInitiator. The Briefcase passes file monikers to Reconcile representing the versions of the document to be reconciled. The briefcase reconciler gains access to the versions by using either the IMoniker::BindToObject or IMoniker::BindToStorage member function. The latter is generally faster and is recommended. The reconciler must release any objects or storage to which it binds.
When the briefcase reconciler uses BindToStorage, it binds to storage that is either flat storage (a stream) or OLE-defined structured storage. If the reconciler expects flat storage, it should use BindToStorage to request the IStream interface. If the reconciler expects structured storage, it should request the IStorage interface. In both cases, it should request read-only direct (nontransacted) access to the storage; read-write access may not generally be available.
A minimal briefcase reconciler typically looks directly at the storage of the other versions and deals with embedded objects in a very primitive manner, such as merging two versions of the object by including both versions in the output version. The initiator locates the appropriate briefcase reconciler by using a subset of the logic implemented by the GetClassFile function to determine the class of a given file and then looks in the registry for the reconciler class associated with the given file class. The Briefcase, like other shell components, determines the class of a file solely by the filename extension. A file's extension must have a registered class for the Briefcase to invoke a reconciler for the file. You must set a registry entry of the following form when installing your reconciler.
CLSID\clsid\Roles\Reconciler\reconciler-classid The class must be quick loading, must be designated _MULTIPLEUSE, and, unless marshallers are provided for the reconciliation interface, must be an in-process server (contained in a DLL) rather than a local server (implemented in an .EXE file).
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Создание Портфеля Reconciler
Вы создаете портфеля reconciler осуществляя интерфейсы примирения. На минимуме, reconciler осуществляет интерфейс IReconcilableObject и IPersistStorage или интерфейс IPersistFile. Так как инициатор, Портфель определяется когда примирение - нужно и называет IReconcilableObject::Выверите функцию члена, чтобы вводить примирение.
Хотя функция члена Reconcile может обеспечить wide-ranging установленное возможностей примирения, портфель reconciler выполняет только минимальное примирение в большинстве случаев. В конкретном, Портфель не требует reconciler, чтобы поддерживать поколение остатка или, чтобы поддерживать объект завершения. Также, reconciler выполняет единственный верх, чтобы вникать примирение и не должно возвращать величину REC_E_NOTCOMPLETE; то есть, это не должно пытаться частичное примирение.
Портфель обеспечивает интерфейс IReconcileInitiator. Портфель reconciler может использовать IReconcileInitiator::функция члена SetAbortCallback, чтобы устанавливать объект завершения. Портфель не использует идентификаторы версии и может, следовательно, не обеспечить предшествующие версии документа если reconciler просит его используя соответствующий член функционирует в IReconcileInitiator. Портфель передает файловые прозвища, чтобы Выверять представляя версии документа, который нужно выверяться. Портфель reconciler получает доступ к версиям используя или IMoniker::BindToObject или IMoniker::функция члена BindToStorage. Последний обычно более быстрое и рекомендовано. reconciler должно выпустить любые объекты или хранение на которые он связывается.
Когда портфель reconciler использует BindToStorage, он связывается на хранение, которое - или плоское хранение ( поток) или определенное структурное хранение OLE. Если reconciler ожидает плоское хранение, это должно использовать BindToStorage, чтобы просить интерфейс IStream. Если reconciler ожидает структурное хранение, это должно просить интерфейс IStorage. В обоих случаях, это должно просить только для чтения прямой доступ (nontransacted) к хранению; прочитайте-доступ записи не может обычно быть доступно.
Минимальный портфель reconciler обычно смотрит непосредственно на хранение других версий и сделок с вложенными объектами в том же простом способе, как например, слияние две версии объекта включая обе версии в выходной версии. Инициатор располагает подходящего портфеля reconciler используя подмножество логики осуществлялся функцией GetClassFile, чтобы определять класс данного файла затем смотреть в регистрации для класса reconciler связанного данным файловым классом. Портфель, подобно другим компонентам оболочки, определяет класс файла исключительно расширением filename. Файловое расширение должно иметь зарегистрированный класс для Портфеля, чтобы вводить reconciler для файла. Вы должны установить вход регистрации следующего формы при установке вашего reconciler.
CLSID\clsid\Roles\Reconciler\reconciler-classid Класс должен быстро загружать, должен быть определен _MULTIPLEUSE, и, если marshallers не предусмотрены для интерфейса примирения, должно быть сервером изготовления (содержимое в DLL) а не локальный сервер (осуществленное в файле .EXE).
|
|
|
|
| |