Compartir a través de


CAsyncMonikerFile (clase)

Proporciona funcionalidad para el uso de monikers asincrónicos en los controles ActiveX (antes controles OLE).

Sintaxis

class CAsyncMonikerFile : public CMonikerFile

Miembros

Constructores públicos

Nombre Descripción
CAsyncMonikerFile::CAsyncMonikerFile Construye un objeto CAsyncMonikerFile.

Métodos públicos

Nombre Descripción
CAsyncMonikerFile::Close Cierra y libera todos los recursos.
CAsyncMonikerFile::GetBinding Recupera un puntero al enlace de transferencia asincrónica.
CAsyncMonikerFile::GetFormatEtc Recupera el formato de los datos del flujo.
CAsyncMonikerFile::Open Abre un archivo de forma asincrónica.

Métodos protegidos

Nombre Descripción
CAsyncMonikerFile::CreateBindStatusCallback Crea un objeto COM que implementa IBindStatusCallback.
CAsyncMonikerFile::GetBindInfo Lo llama la biblioteca del sistema OLE para solicitar información sobre el tipo de enlace que se va a crear.
CAsyncMonikerFile::GetPriority Lo llama la biblioteca del sistema OLE para obtener la prioridad del enlace.
CAsyncMonikerFile::OnDataAvailable Se llama para proporcionar datos cuando están disponibles para el cliente durante las operaciones de enlace asincrónicas.
CAsyncMonikerFile::OnLowResource Se llama cuando los recursos son bajos.
CAsyncMonikerFile::OnProgress Se llama para indicar el progreso del proceso de descarga de datos.
CAsyncMonikerFile::OnStartBinding Se llama cuando se inicia el enlace.
CAsyncMonikerFile::OnStopBinding Se llama cuando se detiene la transferencia asincrónica.

Comentarios

Derivado de CMonikerFile, que a su vez se deriva de COleStreamFile, CAsyncMonikerFile usa la interfaz IMoniker para acceder a cualquier flujo de datos de forma asincrónica, incluida la carga asincrónica de archivos desde una dirección URL. Los archivos pueden ser propiedades de ruta de acceso de datos de los controles ActiveX.

Los monikers asincrónicos se usan principalmente en aplicaciones habilitadas para Internet y controles ActiveX para proporcionar una interfaz de usuario con capacidad de respuesta durante las transferencias de archivos. Un ejemplo excelente es el uso de CDataPathProperty para proporcionar propiedades asincrónicas para los controles ActiveX. El objeto CDataPathProperty obtendrá repetidamente una devolución de llamada para indicar la disponibilidad de nuevos datos durante un largo proceso de intercambio de propiedades.

Para más información sobre cómo usar monikers asincrónicos y controles ActiveX en aplicaciones de Internet, consulte los artículos siguientes:

Jerarquía de herencia

CObject

CFile

COleStreamFile

CMonikerFile

CAsyncMonikerFile

Requisitos

Encabezado: afxole.h

CAsyncMonikerFile::CAsyncMonikerFile

Construye un objeto CAsyncMonikerFile.

CAsyncMonikerFile();

Comentarios

No crea la interfaz IBindHost. IBindHost solo se usa si se proporciona en la función miembro Open.

Para una descripción de la interfaz IBindHost, vea Windows SDK.

CAsyncMonikerFile::Close

Llame a esta función para cerrar y liberar todos los recursos.

virtual void Close();

Comentarios

Se puede llamar en archivos no abiertos o ya cerrados.

CAsyncMonikerFile::CreateBindStatusCallback

Crea un objeto COM que implementa IBindStatusCallback.

virtual IUnknown* CreateBindStatusCallback(IUnknown* pUnkControlling);

Parámetros

pUnkControlling
Puntero al control desconocido (IUnknown externo) o NULL si no se usa la agregación.

Valor devuelto

Si pUnkControlling no es NULL, la función devuelve un puntero al elemento interno IUnknown de un nuevo objeto COM que admite IBindStatusCallback. Si pUnkControlling es NULL, la función devuelve un puntero a un elemento IUnknown en un nuevo objeto COM que admite IBindStatusCallback.

Comentarios

CAsyncMonikerFile requiere un objeto COM que implemente IBindStatusCallback. MFC implementa este objeto y es agregable. Puede invalidar CreateBindStatusCallback para devolver su propio objeto COM. El objeto COM puede agregar la implementación de MFC llamando a CreateBindStatusCallback con el control desconocido del objeto COM. Los objetos COM implementados empleando la compatibilidad con COM CCmdTarget pueden recuperar el control desconocido mediante CCmdTarget::GetControllingUnknown.

Como alternativa, el objeto COM puede delegar en la implementación de MFC llamando a CreateBindStatusCallback( NULL ).

CAsyncMonikerFile::Open llama a CreateBindStatusCallback.

Para más información sobre los monikers asincrónicos y el enlace asincrónico, consulte la interfaz IBindStatusCallback y Funcionamiento del enlace asincrónico y el almacenamiento. Para una explicación de la agregación, consulte Agregación. Los tres temas están en Windows SDK.

CAsyncMonikerFile::GetBindInfo

Se llama desde el cliente de un moniker asincrónico para indicar al moniker asincrónico cómo se quiere enlazar.

virtual DWORD GetBindInfo() const;

Valor devuelto

Recupera la configuración de IBindStatusCallBack. Para una descripción de la interfaz IBindStatusCallback, vea Windows SDK.

Comentarios

La implementación predeterminada establece que el enlace sea asincrónico, que use un medio de almacenamiento (flujo) y que use el modelo de inserción de datos. Invalide esta función si desea cambiar el comportamiento del enlace.

Una razón para hacerlo sería enlazar con el modelo de extracción de datos en lugar del modelo de inserción de datos. En un modelo de extracción de datos, el cliente controla la operación de enlace y el moniker solo proporciona datos al cliente cuando se leen. En el modelo de inserción de datos, el moniker controla la operación de enlace asincrónica y notifica al cliente de forma continua cada vez que hay nuevos datos disponibles.

CAsyncMonikerFile::GetBinding

Llame a esta función para recuperar un puntero al enlace de transferencia asincrónica.

IBinding* GetBinding() const;

Valor devuelto

Puntero a la interfaz IBinding proporcionada al comenzar la transferencia asincrónica. Devuelve NULL si, por cualquier motivo, la transferencia no se puede realizar de forma asincrónica.

Comentarios

Esto le permite controlar el proceso de transferencia de datos a través de la interfaz IBinding, por ejemplo, con IBinding::Abort, IBinding::Pause y IBinding::Resume.

Para una descripción de la interfaz IBinding, vea Windows SDK.

CAsyncMonikerFile::GetFormatEtc

Llame a esta función para recuperar el formato de los datos en el flujo.

FORMATETC* GetFormatEtc() const;

Valor devuelto

Puntero a la estructura FORMATETC de Windows para la secuencia abierta actualmente. Devuelve NULL si el moniker no se ha enlazado, si no es asincrónico o si no se ha iniciado la operación asincrónica.

CAsyncMonikerFile::GetPriority

Se llama desde el cliente de un moniker asincrónico a medida que el proceso de enlace comienza a recibir la prioridad dada al subproceso para la operación de enlace.

virtual LONG GetPriority() const;

Valor devuelto

Prioridad en la que tendrá lugar la transferencia asincrónica. Una de las marcas de prioridad de subproceso estándar: THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_BELOW_NORMAL, THREAD_PRIORITY_HIGHEST, THREAD_PRIORITY_IDLE, THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_NORMAL y THREAD_PRIORITY_TIME_CRITICAL. Consulte la función SetThreadPriority de Windows para una descripción de estos valores.

Comentarios

GetPriority no se debe llamar directamente. La implementación predeterminada devuelve THREAD_PRIORITY_NORMAL.

CAsyncMonikerFile::OnDataAvailable

Un moniker asincrónico llama a OnDataAvailable para proporcionar datos al cliente a medida que están disponibles, durante las operaciones de enlace asincrónicas.

virtual void OnDataAvailable(DWORD dwSize, DWORD bscfFlag);

Parámetros

dwSize
La cantidad acumulativa (en bytes) de los datos disponibles desde el principio del enlace. Puede ser cero, lo que indica que la cantidad de datos no es relevante para la operación o que no hay ninguna cantidad específica disponible.

bscfFlag
Valor de enumeración BSCF. Puede ser uno o varios de los valores siguientes:

  • BSCF_FIRSTDATANOTIFICATION identifica la primera llamada a OnDataAvailable para una operación de enlace determinada.

  • BSCF_INTERMEDIATEDATANOTIFICATION identifica una llamada intermedia a OnDataAvailable para una operación de enlace.

  • BSCF_LASTDATANOTIFICATION identifica la última llamada a OnDataAvailable para una operación de enlace.

Comentarios

La implementación predeterminada de esta función no hace nada. Vea la siguiente implementación de ejemplo.

Ejemplo

void CMyMoniker::OnDataAvailable(DWORD dwSize, DWORD bscfFlag)
{
   if ((bscfFlag & BSCF_FIRSTDATANOTIFICATION) != 0)
   {
      m_dwReadBefore = 0;
      m_strText.Empty();
   }

   DWORD dwArriving = dwSize - m_dwReadBefore;

   if (dwArriving > 0)
   {
      int nLen = m_strText.GetLength();
      ASSERT((DWORD)nLen == m_dwReadBefore);
      LPTSTR psz = m_strText.GetBuffer(nLen + dwArriving);
      Read(psz + nLen, dwArriving);
      m_strText.ReleaseBuffer(nLen + dwArriving);
      m_dwReadBefore = dwSize;
   }
}

CAsyncMonikerFile::OnLowResource

Se llama por el moniker cuando hay pocos recursos.

virtual void OnLowResource();

Comentarios

La implementación predeterminada llama a GetBinding( )-> Abort( ).

CAsyncMonikerFile::OnProgress

Se llama por el moniker repetidamente para indicar el progreso actual de esta operación de enlace, normalmente a intervalos razonables durante una operación larga.

virtual void OnProgress(
    ULONG ulProgress,
    ULONG ulProgressMax,
    ULONG ulStatusCode,
    LPCTSTR szStatusText);

Parámetros

ulProgress
Indica el progreso actual de la operación de enlace con respecto al máximo esperado indicado en ulProgressMax.

ulProgressMax
Indica el valor máximo esperado de ulProgress para la duración de las llamadas a OnProgress de esta operación.

ulStatusCode
Proporciona información adicional sobre el progreso de la operación de enlace. Los valores válidos se toman de la enumeración BINDSTATUS. Vea Comentarios para ver los valores posibles.

szStatusText
Información sobre el progreso actual, según el valor de ulStatusCode. Vea Comentarios para ver los valores posibles.

Comentarios

Los valores posibles para ulStatusCode (y szStatusText de cada valor) son:

Valor Descripción
BINDSTATUS_FINDINGRESOURCE La operación de enlace está buscando el recurso que contiene el objeto o el almacenamiento al que se está enlazando. szStatusText proporciona el nombre para mostrar del recurso que se busca (por ejemplo, "www.microsoft.com").
BINDSTATUS_CONNECTING La operación de enlace está conectando al recurso que contiene el objeto o el almacenamiento al que se está enlazando. szStatusText proporciona el nombre para mostrar del recurso al que se está conectando (por ejemplo, una dirección IP).
BINDSTATUS_SENDINGREQUEST La operación de enlace está solicitando el objeto o el almacenamiento al que se está enlazando. szStatusText proporciona el nombre para mostrar del objeto (por ejemplo, un nombre de archivo).
BINDSTATUS_REDIRECTING La operación de enlace se ha redirigido a otra ubicación de datos. szStatusText proporciona el nombre para mostrar de la nueva ubicación de datos.
BINDSTATUS_USINGCACHEDCOPY La operación de enlace está recuperando el objeto o el almacenamiento solicitado de una copia en caché. szStatusText es NULL.
BINDSTATUS_BEGINDOWNLOADDATA La operación de enlace ha empezado a recibir el objeto o el almacenamiento al que se está enlazando. szStatusText proporciona el nombre para mostrar de la ubicación de los datos.
BINDSTATUS_DOWNLOADINGDATA La operación de enlace continúa recibiendo el objeto o el almacenamiento al que se está enlazando. szStatusText proporciona el nombre para mostrar de la ubicación de los datos.
BINDSTATUS_ENDDOWNLOADDATA La operación de enlace ha terminado de recibir el objeto o el almacenamiento al que se está enlazando. szStatusText proporciona el nombre para mostrar de la ubicación de los datos.
BINDSTATUS_CLASSIDAVAILABLE Está a punto de crearse una instancia del objeto al que se está enlazando. szStatusText proporciona el CLSID del nuevo objeto en formato de cadena, lo que permite al cliente cancelar la operación de enlace, si lo desea.

CAsyncMonikerFile::OnStartBinding

Invalide esta función en las clases derivadas para realizar acciones cuando se inicia el enlace.

virtual void OnStartBinding();

Comentarios

El moniker vuelve a llamar a esta función. La implementación predeterminada no hace nada.

CAsyncMonikerFile::OnStopBinding

Se llama por el moniker al final de la operación de enlace.

virtual void OnStopBinding(HRESULT hresult, LPCTSTR szError);

Parámetros

hresult
HRESULT que es el valor del error o advertencia.

szErrort
Cadena de caracteres que describe el error.

Comentarios

Invalide esta función para realizar acciones cuando se detiene la transferencia. De forma predeterminada, la función libera a IBinding.

Para una descripción de la interfaz IBinding, vea Windows SDK.

CAsyncMonikerFile::Open

Llame a esta función miembro para abrir un archivo de forma asincrónica.

virtual BOOL Open(
    LPCTSTR lpszURL,
    CFileException* pError = NULL);

virtual BOOL Open(
    IMoniker* pMoniker,
    CFileException* pError = NULL);

virtual BOOL Open(
    LPCTSTR lpszURL,
    IBindHost* pBindHost,
    CFileException* pError = NULL);

virtual BOOL Open(
    IMoniker* pMoniker,
    IBindHost* pBindHost,
    CFileException* pError = NULL);

virtual BOOL Open(
    LPCTSTR lpszURL,
    IServiceProvider* pServiceProvider,
    CFileException* pError = NULL);

virtual BOOL Open(
    IMoniker* pMoniker,
    IServiceProvider* pServiceProvider,
    CFileException* pError = NULL);

virtual BOOL Open(
    LPCTSTR lpszURL,
    IUnknown* pUnknown,
    CFileException* pError = NULL);

virtual BOOL Open(
    IMoniker* pMoniker,
    IUnknown* pUnknown,
    CFileException* pError = NULL);

Parámetros

lpszURL
Puntero al archivo que se va a abrir de forma asincrónica. El archivo puede ser cualquier dirección URL o nombre de archivo válido.

pError
Puntero a las excepciones de archivo. En caso de error, se establecerá en la causa.

pMoniker
Puntero a la interfaz de moniker asincrónico IMoniker, un moniker preciso que es la combinación del propio moniker del documento, que se puede recuperar con IOleClientSite::GetMoniker(OLEWHICHMK_CONTAINER) y un moniker creado a partir del nombre de la ruta de acceso. El control puede usar este moniker para enlazar, pero no es el moniker que el control debe guardar.

pBindHost
Puntero a la interfaz IBindHost que se usará para crear el moniker a partir de un nombre de ruta de acceso potencialmente relativo. Si el host de enlace no es válido o no proporciona un moniker, la llamada tiene Open(lpszFileName,pError) como valor predeterminado . Para una descripción de la interfaz IBindHost, vea Windows SDK.

pServiceProvider
Puntero a la interfaz IServiceProvider. Si el proveedor de servicios no es válido o no proporciona el servicio para IBindHost, la llamada tiene Open(lpszFileName,pError) como valor predeterminado.

pUnknown
Puntero a la interfaz IUnknown. Si se encuentra IServiceProvider, la función consulta IBindHost. Si el proveedor de servicios no es válido o no proporciona el servicio para IBindHost, la llamada tiene Open(lpszFileName,pError) como valor predeterminado.

Valor devuelto

Distinto de cero si el archivo se abre correctamente; de lo contrario, 0.

Comentarios

Esta llamada inicia el proceso de enlace.

Puede usar una dirección URL o un nombre de archivo para el parámetro lpszURL. Por ejemplo:

CMyMoniker *pMyMoniker = new CMyMoniker();
pMyMoniker->Open(_T("http://www.microsoft.com"));

O bien

CMyMoniker *pMyMoniker = new CMyMoniker();
pMyMoniker->Open(_T("file:c:\\mydata.dat"));

Consulte también

CMonikerFile (clase)
Gráfico de jerarquías
CMonikerFile (clase)
CDataPathProperty (clase)