Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Crea un objeto aggregatable capaz de calcular referencias dependientes del contexto.
Sintaxis
HRESULT CoCreateFreeThreadedMarshaler(
[in] LPUNKNOWN punkOuter,
[out] LPUNKNOWN *ppunkMarshal
);
Parámetros
[in] punkOuter
Puntero al agregado del objeto que controla IUnknown.
[out] ppunkMarshal
Dirección de la variable de puntero que recibe el puntero de interfaz al serializador aggregatable.
Valor devuelto
Esta función puede devolver el valor devuelto estándar E_OUTOFMEMORY, así como el siguiente valor.
| Código devuelto | Descripción |
|---|---|
|
Se creó el serializador. |
Comentarios
La función CoCreateFreeThreadedMarshaler permite a un objeto serializar eficazmente punteros de interfaz entre subprocesos del mismo proceso. Si los objetos no admiten la serialización entre subprocesos, no es necesario llamar a esta función. Está pensado para su uso por parte de servidores DLL sin subprocesos a los que deben tener acceso directamente todos los subprocesos de un proceso, incluso aquellos subprocesos asociados a apartamentos de un solo subproceso. Serializa el puntero de memoria real sobre otros apartamentos como un "proxy" falso y, por lo tanto, proporciona acceso directo a todos los autores de llamadas, incluso si no están subprocesos libres.
La función CoCreateFreeThreadedMarshaler realiza las siguientes tareas:
- Crea un objeto serializador sin subprocesos.
- Agrega este serializador al objeto especificado por el parámetro punkOuter . Normalmente, este objeto es el cuyos punteros de interfaz se van a serializar.
- Comprueba el contexto de destino especificado por el parámetro dwDestContext de la función CoMarshalInterface.
- Si el contexto de destino es MSHCTX_INPROC, copia el puntero de interfaz en el flujo de serialización.
- Si el contexto de destino es cualquier otro valor, busca o crea una instancia del serializador predeterminado (estándar) de COM y le delega las referencias.
Se debe tener gran cuidado en el uso de la función CoCreateFreeThreadedMarshaler . Esto se debe a que el rendimiento de los objetos que agregan el serializador sin subprocesos se obtiene a través de una infracción calculada de las reglas COM, con el riesgo siempre presente de comportamiento indefinido a menos que el objeto funcione dentro de determinadas restricciones. Las restricciones más importantes son:
- Un objeto serializador de subprocesos libre no puede contener punteros directos a interfaces en un objeto que no agrega el serializador de subprocesos libre como parte de su estado. Si el objeto usara referencias directas a objetos agregados de un solo subproceso normales, puede interrumpir su propiedad de subproceso único. Si el objeto tuviera que usar referencias directas a objetos agregados multiproceso normales, estos objetos se pueden comportar de maneras que no muestran ninguna sensibilidad a las necesidades de clientes agregados de un solo subproceso directo. Por ejemplo, estos objetos pueden girar nuevos subprocesos y pasar parámetros a los subprocesos que son referencias a objetos agregados de un solo subproceso normales.
- Un objeto serializador sin subprocesos no puede contener referencias a servidores proxy a objetos de otros apartamentos. Los servidores proxy son sensibles al modelo de subprocesos y pueden devolver RPC_E_WRONG_THREAD si lo llama el cliente incorrecto.
Requisitos
| Requisito | Value |
|---|---|
| Cliente mínimo compatible | Windows 2000 Professional [aplicaciones de escritorio | Aplicaciones para UWP] |
| Servidor mínimo compatible | Windows 2000 Server [aplicaciones de escritorio | Aplicaciones para UWP] |
| Plataforma de destino | Windows |
| Encabezado | combaseapi.h (incluya Objbase.h) |
| Library | Ole32.lib |
| Archivo DLL | Ole32.dll |