Przy określaniu klasy COM-widoczne w C++ można zdefiniować obsługiwanego modelu wątków w pliku nagłówkowym (linia threading(single)
):Jak oznaczać obiekty .NET narażone na COM-interop jako pojedyncze wątki?
[
coclass,
default(IComInterface),
threading(single),
vi_progid("Example.ComClass"),
progid("Example.ComClass.1"),
version(1.0),
uuid("72861DF5-4C77-43ec-A4DC-ED04396F0CCD")
]
Czy istnieje porównywalny sposób ustalania modelu wątków w .NET (dla przykładowy atrybut)? I obecnie określić mój COM klasy jako takie:
[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:
Uwagi dotyczące zaznaczonej odpowiedzi są naprawdę ważne. Wygląda na to, że jedynym sposobem na poinformowanie RegAsm o ustawieniu innego ThreadingModel jest napisanie niestandardowej metody rejestracji oznaczonej atrybutem [ComRegisterFunction]
.
Myślę, że OP nie mówi o atrybutach MIDL. http://msdn.microsoft.com/de-de/library/zfbxt3zs.aspx – Henrik
Masz rację. To nie zmienia mojej odpowiedzi. –
Właśnie sprawdziłem rejestr, a obecna wartość dla ThreadingModel to "Both", której nie szukam. Czy nie ma innego sposobu na ustawienie ThreadingModel oprócz ręcznej rejestracji klas COM przy użyciu metody oznaczonej [ComRegisterFunction]? – Xperimental