2009-10-29 36 views
7

Chúng tôi đang làm việc trên một tích hợp của một ứng dụng dựa trên MFC lớn với một số ít được quản lý (.NET) add-in. Giao tiếp với các add-in này được thực hiện thông qua COM.COM Interop miễn phí và hội đồng phụ thuộc

Trước đây, chúng tôi vừa sử dụng sổ đăng ký để làm cho các trình bổ sung này khả dụng (dưới dạng máy chủ COM) cho ứng dụng. Nhưng, bây giờ chúng tôi đang cố gắng sử dụng COM interop đăng ký miễn phí để làm điều này.

Chúng tôi muốn các trình bổ sung này có thể sống trong một thư mục riêng biệt từ thư mục mà ứng dụng đang chạy - lý tưởng ở mọi nơi. Nhưng, chúng tôi dường như đang chạy vào các vấn đề với instantiation của các đối tượng máy chủ do không có khả năng để giải quyết hội đồng phụ thuộc, mà còn sống trong thư mục với DLL COM server.

Kết nối COM "cũ kỹ" xử lý việc này bằng cách sử dụng ngữ cảnh LoadFrom khi nó tải lắp ráp đích. Nhưng cơ chế ngữ cảnh kích hoạt dường như không làm điều này.

Có ai biết cách làm việc này không? Không rõ liệu chúng ta có thể xác định các hội đồng phụ thuộc trong biểu thức SxS của mô-đun hay có lẽ chúng ta có thể tạo ngữ cảnh kích hoạt khác nhau?

Cảm ơn mọi suy nghĩ/mẹo!

Jeff

+0

Bạn đã tìm thấy một giải pháp cho that'? – RayOldProf

Trả lời

1

Hy vọng tôi hiểu vấn đề vì tôi không quen thuộc với dự án MFC cũng không phải là hạn chế của nó. Làm thế nào về một lớp học "nổi tiếng" NET với một giao diện (đăng ký vĩnh viễn với các ứng dụng MFC) mà, đến lượt nó, xử lý tất cả các kích hoạt và instantiating?

Rodney

+2

Đây thực sự là một giải pháp đã thành công: chúng tôi tạo ra một mô-đun C++/CLI, có thể được kích hoạt một cách miễn phí, và chúng tôi sử dụng nó để khởi tạo lớp C#. Để làm việc này, chúng ta cũng cần phải thiết lập một trình xử lý sự kiện AssemblyResolve, để các assembly phụ thuộc trong cùng một thư mục có thể được định vị. Điều này là tốt, nhưng là loại clunky. Có vẻ như điều này sẽ có thể làm việc mà không có thêm mức độ vô hướng. – Jeff

-1

Bạn đã đăng ký trung gian (interop) dll với .net framework?

C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm "đường dẫn .. \ AxInterop.xxx.dll" hoặc C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm "con đường .. \ Interop.xxx.dll"

Trân Phani

+2

Cảm ơn lời bình luận, Phani. Toàn bộ điểm cố gắng để làm điều này là để tránh đăng ký. – Jeff

0

Khi tôi nhìn vào bài viết tại Simplify App Deployment with ClickOnce and Registration-Free COM tôi lưu ý rằng họ tham khảo các tên tập tin của đăng ký miễn phí DLL đối tượng COM trong biểu hiện ứng dụng. Tôi đoán rằng tên tập tin này có thể được thay đổi để bao gồm một thư mục hoặc như vậy.

Thứ hai, trong phần "Ví dụ phức tạp hơn", chúng bao gồm các đối tượng COM phụ thuộc dưới dạng tham chiếu đến dự án của chúng và đặt chúng là bị cô lập. Đó là, bây giờ họ cũng đăng ký miễn phí. Tôi đoán là con đường của họ cũng có thể được cập nhật.

+0

Chúng tôi không thực sự có sự sang trọng của việc sửa đổi tệp kê khai ứng dụng, vì các hội đồng được tải ở đây là "bổ trợ" và có thể được thêm sau khi thực tế. Có thể làm điều gì đó khác trong tệp kê khai sẽ là câu trả lời ở đây, nhưng không có gì mà chúng tôi đã thử đã làm việc - dường như chỉ là "vấn đề" với thuật toán tải của .NET. – Jeff

-1

mở visual studio dấu nhắc lệnh của bạn và cố gắng đăng ký lắp ráp bằng cách sử dụng regasm

regasm /tlb:"path" 
+3

Như tôi đã đề cập ở trên, chúng tôi không muốn đăng ký bất cứ điều gì. Điều này sẽ bao gồm thư viện kiểu. Ngoài ra, trong trường hợp này, thư viện kiểu cho giao diện chúng tôi đang triển khai thực sự đã được đăng ký. – Jeff

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