2010-10-29 33 views
6

Tôi cần phát triển một số lớp cần gọi từ VB6 với Managed C++ (C++/CLI).Tạo một assembly COM có thể nhìn thấy từ managed C++ (C++/CLI)

Tôi đã phát triển mẫu đầu tiên trong C# và tôi có thể sử dụng cụm từ thông qua COM mà không gặp sự cố chỉ sử dụng cài đặt "Đăng ký COM interop" và "Make assembly COM visible" (và sử dụng thuộc tính [ClassInterface (ClassInterfaceType) .AutoDual)] để tạo các phương thức có sẵn tại VB6

Sau đó tôi đã cố gắng dịch mẫu sang C++/CLI mà không thành công. Tôi đã tạo cùng một lớp với thuộc tính [ClassInterface (ClassInterfaceType.AutoDual)]. đã thiết lập các "nhúng IDL" thiết lập để xác định đầu ra TLB nhưng TLB không được tạo ra tự động.Nếu tôi sử dụng tlbexp util trên DLL tạo ra tôi nhận được một tlb có thể được nhập khẩu tại VB6 nhưng khi tôi cố gắng tạo ra một ví dụ Tôi nhận được một "ActiveX compoennt không thể tạo đối tượng (429) "

Tôi cần làm gì hơn với dự án để cho phép nó chạy?

Xin cảm ơn trước.

Trả lời

6

Không nhiều để tiếp tục nhưng bạn chưa bao giờ đề cập đến việc đăng ký hội đồng. C++ IDE không có tùy chọn "Đăng ký COM interop". Từ Visual Studio Command Prompt, chạy Regasm.exe trên assembly để nó được đăng ký. Bạn cần tùy chọn/codebase nếu bạn không đặt assembly trong GAC. Và tùy chọn/tlb tạo ra thư viện kiểu, làm cho tlbexp.exe không cần thiết.

+0

Tôi đang đăng ký lắp ráp tự động với tlbexp, phải không? Tùy chọn/tlb được báo cáo là không được trình biên dịch và trình liên kết không nhận ra. Bạn có chắc chắn về điều đó không? –

+0

Không, tlbexp chỉ tạo thư viện kiểu, không có gì được đăng ký. Tùy chọn/tlb là cho Regasm.exe, không phải trình biên dịch hoặc trình liên kết. Nó khiến tôi rất khó hiểu rằng bạn không nhận được điều đó từ bài đăng của tôi. –

+0

Nó phải là một cái gì đó liên quan với ở đây là một chút muộn. Tôi đã đọc lại bài đăng của bạn và tôi bối rối như bạn :) –

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