Al definir una clase COM-visible en C++ que puede definir el modelo apoyado roscado en el archivo de cabecera (la línea threading(single)
):Cómo marcar los objetos .NET expuestos a COM-interoperabilidad como un único subproceso?
[
coclass,
default(IComInterface),
threading(single),
vi_progid("Example.ComClass"),
progid("Example.ComClass.1"),
version(1.0),
uuid("72861DF5-4C77-43ec-A4DC-ED04396F0CCD")
]
¿Hay una manera comparable de establecer el modelo de subprocesos de .NET (por ejemplo un atributo)? Actualmente defino mi COM de clase como tal:
[Guid("67155A91-2948-43f5-B07F-5C55CDD240E5")]
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IComInterface
{
...
}
[Guid("DC5E6955-BB29-44c8-9FC0-6AADEEB2AFFB")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("Example.ComClass")]
public class ComClass : IComInterface
{
...
}
--edit:
Los comentarios sobre la respuesta marcada son lo realmente importante. Parece que la única forma de decirle a RegAsm que configure un ThreadingModel diferente es escribiendo un método de registro personalizado marcado con el atributo [ComRegisterFunction]
.
Creo que el OP no está hablando de los atributos de MIDL. http://msdn.microsoft.com/de-de/library/zfbxt3zs.aspx – Henrik
Tienes razón. No cambia mi respuesta. –
Acabo de comprobar el registro y el valor actual de ThreadingModel es "Ambos", que no es el que estoy buscando. ¿No hay otra forma de configurar el ThreadingModel además de registrar manualmente las clases COM usando un método marcado con [ComRegisterFunction]? – Xperimental