Khi xác định một lớp COM có thể nhìn thấy trong C++ Tôi có thể xác định mô hình được hỗ trợ luồng trong file header (đường threading(single)
):Làm thế nào để đánh dấu đối tượng .NET tiếp xúc với COM-interop dưới dạng đơn luồng?
[
coclass,
default(IComInterface),
threading(single),
vi_progid("Example.ComClass"),
progid("Example.ComClass.1"),
version(1.0),
uuid("72861DF5-4C77-43ec-A4DC-ED04396F0CCD")
]
Có cách nào có thể so sánh các thiết lập các mô hình luồng trong .NET (đối với ví dụ một thuộc tính)? Tôi hiện xác định COM-lớp học của tôi như vậy:
[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:
Các ý kiến về câu trả lời rõ rệt là những điều thực sự quan trọng. Nó có vẻ như cách duy nhất để nói với RegAsm để thiết lập một ThreadingModel khác nhau là viết một phương thức đăng ký tùy chỉnh được đánh dấu bằng thuộc tính [ComRegisterFunction]
.
Tôi nghĩ OP không nói về các thuộc tính MIDL. http://msdn.microsoft.com/de-de/library/zfbxt3zs.aspx – Henrik
Bạn nói đúng. Nó không thay đổi câu trả lời của tôi. –
Tôi chỉ cần kiểm tra sổ đăng ký và giá trị hiện tại cho ThreadingModel là "Cả hai", mà không phải là một trong những tôi đang tìm kiếm. Không có cách nào khác để thiết lập ThreadingModel ngoài việc đăng ký thủ công các lớp COM bằng cách sử dụng một phương thức được đánh dấu bằng [ComRegisterFunction]? – Xperimental