2009-05-18 47 views
8

Tôi biết cách tạo một COM DLL (một Thư viện Lớp) trong C#. Có thể tạo một EXE thay thế COM bằng C#?Tạo COM Surrogate server (exe) trong C#

Đây sẽ là một máy chủ độc lập có khả năng khởi chạy và lưu trữ các đối tượng COM, sau đó có thể truy cập được với các máy khách COM.

Trả lời

2

Một tùy chọn, nếu bạn muốn có thành phần COM ngoài quy trình, hãy lưu trữ một dll trong COM + qua serviced components. Điều này chỉ hỗ trợ dll mặc dù, nhưng bạn có thể viết một exe shell (để sử dụng độc lập) mà chỉ đơn giản là defers để dll này.

Không đơn giản như VB, nhưng nó hoạt động.

Tôi nhớ ai đó thấy tôi một cách trực tiếp hơn (không COM +), nhưng tôi có thể không cho cuộc sống của tôi nhớ đó là gì ...

5

Quá trình thay thế mặc định cho COM - điều mà lưu COM DLL, hay còn gọi là COM Surrogate - là dllhost.exe. Có thể tạo một quy trình thay thế trong C++. This article giải thích cách thực hiện.

Nhưng các API đó không được hiển thị trong trình bao bọc như là một phần của thư viện lớp cơ sở trong Khuôn khổ .NET. Nếu bạn muốn viết để chỉ viết mã được quản lý, bạn cần cái gì khác.

Tôi thấy một vài tùy chọn.

  1. The Visual Studio SDK, bản tải xuống miễn phí dành cho nhà phát triển muốn mở rộng Visual Studio. Trong SDK đó, có một lớp lib có các trình bao bọc như vậy. Đặc biệt, hãy xem the ISurrogate class.
    NHƯNG, giấy phép SDK VS cho biết SDK chỉ được sử dụng chỉ cho các sản phẩm mở rộng hoặc thêm giá trị cho Visual Studio. Tôi không phải là luật sư, nhưng đó là sự hiểu biết của tôi về giấy phép, điều này khá rõ ràng. Các điều khoản này có nghĩa là SDK VS sẽ không hữu ích cho việc xây dựng ứng dụng chung.
    Câu hỏi còn lại là, chính xác cách bạn sử dụng SDK VS về mặt kỹ thuật để tạo ra một thay thế COM chỉ sử dụng mã C#? Một lần nữa, ở đây tôi không biết. Tôi đã xem xét các tài liệu một thời gian ngắn cho các hướng dẫn về cách sử dụng trình bao bọc ISurrogate, nhưng không tìm thấy.
  2. Sử dụng mã trong this article.
    Bài viết khám phá một loạt các khía cạnh khác nhau xung quanh COM và .NET interop. Hướng tới cuối bài viết nó cung cấp mã nguồn để xây dựng máy chủ COM của riêng bạn trong C#, hoàn thành với tất cả các p/gọi các cuộc gọi đến CoRegisterClassObject() và bạn bè.
4

Tôi muốn làm tương tự và tìm thấy ví dụ dự án tuyệt vời CSExeCOMServer trên Khung mã tất cả trong một. Nó thực sự xây dựng lại logic máy chủ COM thông thường bằng phương thức .NET và các cuộc gọi tự nhiên tới Windows API. Nhưng có vẻ như tất cả vẫn còn quá phức tạp. Tôi cho rằng không có cách đơn giản và nhanh chóng để trưng ra các đối tượng .NET như COM trong máy chủ quá trình và nó không phải là kiến ​​trúc của sự lựa chọn.

+0

Liên kết mẫu đẹp. –

Các vấn đề liên quan