2010-02-12 37 views
5

Tôi gặp sự cố khi sử dụng dll VB.NET trong chương trình VB6. Tôi đã tạo dll của tôi với GuidAttribute, sử dụng RegAsm để tạo một tlb và thêm nó vào tài liệu tham khảo của chương trình VB6 của tôi. Vấn đề là khi tôi cố gắng tạo đối tượng bằng cách sử dụng chức năng CreateObject, tuy nhiên lỗi sau đây xuất hiện "thành phần ActiveX không thể tạo đối tượng."Tôi muốn sử dụng một VB.NET dll trong một chương trình VB6. Có thể không?

Tôi không biết nếu tôi thiếu bất kỳ tuyên bố nào trên VB.NET để sử dụng nó như một dll hoặc nếu tôi không sử dụng chức năng CreateObject đúng cách.

+0

Ngoài ra tôi: Nếu tôi đặt "Make COM có thể nhìn thấy" và sau đó sử dụng dll trong VB6, là điều đó có thể? –

Trả lời

0

bạn phải đảm bảo thành phần của mình được đăng ký chính xác cho com interop .. trong tab thuộc tính dự án có tùy chọn hộp kiểm để bật tính năng này, bạn đang ở trên đường dẫn đúng với việc tạo loại lib mà bạn có thể tham chiếu vb6, bạn có thể đơn giản thêm tham chiếu đến nó giống như bất kỳ com compenent khác. tuy nhiên thực sự đăng ký nó thay vì tạo một tệp tlb.

Khi bạn đăng ký một hội đồng để sử dụng bởi COM, Regasm.exe thêm mục vào sổ đăng ký trên máy tính cục bộ. Cụ thể hơn, nó tạo ra các khóa registry phụ thuộc phiên bản cho phép nhiều phiên bản của cùng một assembly chạy song song trên một máy tính. Lần đầu tiên một assembly được đăng ký, một khóa cấp cao nhất được tạo cho assembly và một subkey duy nhất được tạo cho phiên bản cụ thể. Mỗi khi bạn đăng ký phiên bản mới của assembly, Regasm.exe sẽ tạo một khoá con cho phiên bản mới.

Sau khi đăng ký lắp ráp bằng Regasm.exe, bạn có thể cài đặt nó trong bộ nhớ cache lắp ráp chung để nó có thể được kích hoạt từ bất kỳ máy khách COM nào. Nếu assembly chỉ được kích hoạt bởi một ứng dụng duy nhất, bạn có thể đặt nó trong thư mục của ứng dụng đó.

nếu bạn quan tâm đến những gì công cụ tạo ra cho registry sử dụng

regasm {Đường dẫn đến hội của bạn} .dll /regfile:myTest.reg

0

Khó có thể nói với các thông tin bạn đã cung cấp , nhưng có vẻ như bạn không làm cho hội đồng có thể tìm thấy được. Từ MSDN:

Dưới HKCR \ CLSID {0000 ... 0000} then chốt, giá trị mặc định được thiết lập để các ProgID của lớp, và hai mới có tên giá trị, Class và hội, được thêm vào. Thời gian chạy đọc giá trị Assembly từ sổ đăng ký và chuyển nó đến trình phân giải lắp ráp thời gian chạy. Trình phân giải lắp ráp cố gắng xác định vị trí lắp ráp, dựa trên lắp ráp thông tin như tên và số phiên bản. Đối với việc lắp ráp resolver để xác định vị trí một lắp ráp, lắp ráp có được trong một trong những địa điểm sau:

Việc lắp ráp bộ nhớ cache toàn cầu (phải là một assembly tên mạnh ).

Trong thư mục ứng dụng. Các hội đồng được tải từ ứng dụng đường dẫn chỉ có thể truy cập từ ứng dụng đó.

Dọc theo đường dẫn tệp được chỉ định với tùy chọn /codebase tới Regasm.exe.

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