Các mục đăng ký cho lớp NET COM Interop trong trường hợp này là: -
HKEY_CLASSES_ROOT\myComLib.testObject
chứa một giá trị CLSID và mục CLSID tự
HKEY_CLASSES_ROOT\CLSID\<<myComLib.testObject\CLSID value>>
Họ là cũng được sao chép trong
HKEY_LOCAL_MACHINE\SOFTWARE\Classes
CreateObject sử dụng các mục HKEY_CLASSES_ROOT để lấy các chi tiết của tên lớp thông qua năm vì vậy nếu họ đang bỏ lỡ bạn sẽ nhận được
Run-time error '429': ActiveX component can't create object
Trong IDE VB6, thêm một tham chiếu đến các dll (trong trường hợp của một NET lắp ráp, thông qua nó là tập tin tlb) bỏ qua tìm kiếm đăng ký này do đó cho phép các ràng buộc sớm để làm việc mà không có các mục đăng ký COM.
Lớp học phải được đăng ký chính xác để CreateObject hoạt động. Điều này sẽ xảy ra như là một phần của quá trình xây dựng Visual Studio, nếu không nó cần phải được đăng ký bằng tay bằng cách sử dụng Regasm.
Bạn có thể kiểm tra hành vi này bằng cách thực hiện như sau: -
1) Tạo VB mới.NET myComLib dự án đăng ký COM Interop trong dự án Biên dịch tài sản và thêm một lớp TestObject
Public Class testObject
Public Property TestProperty As String
Public Function TestFunction() As String
Return "return"
End Function
End Class
2) Xây dựng myComLib
3) Tạo một dự án VB6 mới, thêm hai nút lệnh để Form1 và đoạn mã sau
Private Sub Command1_Click()
Dim b As Object
Set b = New myComLib.testObject
b.TestProperty = "Hello"
MsgBox b.TestProperty, vbOKOnly, b.TestFunction()
End Sub
Private Sub Command2_Click()
Dim b As Object
Set b = CreateObject("myComLib.testObject")
b.TestProperty = "Hello"
MsgBox b.TestProperty, vbOKOnly, b.TestFunction()
End Sub
4) Chạy dự án VB6 (không biên dịch đầy đủ như rằng sẽ thất bại)
Command2 sẽ bật lên một hộp thông báo, Bộ Tư lệnh 1 sẽ thất bại với
Compile Error: User-defined type not defined.
5) Dừng dự án và thêm một tham chiếu đến myComLib qua nó TLB tập tin
6) Chạy dự án VB6 và cả nút bây giờ sẽ làm việc
7) Đi vào registry và xóa các entry HKEY_CLASSES_ROOT \ myComLib.testObject (điều này có thể được tái tạo bởi Xây dựng lại các thành phần .NET, bạn sẽ cần phải đóng VB6 để thực hiện việc xây dựng lại)
Command2 bây giờ sẽ thất bại với
Run-time error '429': ActiveX component can't create object
cho đến khi mục nhập đăng ký được thêm lại.
Tôi chỉ cố gắng này và cả hai phương pháp làm việc. Tôi đang trên XP và tôi đã thêm myComLib.tlb làm tài liệu tham khảo cho dự án. Bạn đang sử dụng XP hoặc Win7? –
tôi đang sử dụng xp. tôi đã đăng ký thư viện và cũng được sao chép vào thư mục dự án (cả tệp dll và tlb) tôi cũng đã thêm một tham chiếu đến dự án. Đó là lý do tại sao các công trình ràng buộc sớm. Sự ràng buộc muộn cũng nên làm việc. tôi cũng đã cố gắng để thêm một referense để scrrun.dll nhưng vẫn không có gì. – reven