在這種情況下,對於.NET COM互操作類的註冊表項: -
HKEY_CLASSES_ROOT\myComLib.testObject
包含CLSID值和CLSID條目本身
HKEY_CLASSES_ROOT\CLSID\<<myComLib.testObject\CLSID value>>
他們是也複製於
HKEY_LOCAL_MACHINE\SOFTWARE\Classes
的CreateObject使用HKEY_CLASSES_ROOT條目檢索就這麼過去了,如果他們缺少類名的詳細信息,您將收到
Run-time error '429': ActiveX component can't create object
在VB6的IDE,添加對DLL的引用(在的情況下.NET程序集,通過它的tlb文件)繞過此註冊表搜索,從而允許早期綁定在沒有COM註冊表項的情況下工作。
該類必須正確註冊CreateObject才能正常工作。這應該作爲Visual Studio構建過程的一部分發生,否則需要使用Regasm手動註冊。
您可以通過以下操作測試此行爲: -
1)創建一個新的VB。NET項目myComLib在項目註冊爲COM互操作編譯屬性和添加一個類的TestObject
Public Class testObject
Public Property TestProperty As String
Public Function TestFunction() As String
Return "return"
End Function
End Class
2)結構myComLib
3)創建一個新的VB6項目,添加兩個命令按鈕到Form1和下面的代碼
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)運行VB6項目(不完整的編譯爲失敗)
命令2會彈出一個消息框,命令1將失敗,並
Compile Error: User-defined type not defined.
5)停止該項目,並添加到myComLib參考通過它的TLB文件
6)運行VB6項目和兩個按鈕,現在應該工作
7)進入註冊表並刪除HKEY_CLASSES_ROOT \ myComLib.testObject條目(這可以通過重建.NET組件重新創建,您需要關閉VB6開展重建)
命令2,現在將失敗,
Run-time error '429': ActiveX component can't create object
,直到註冊表項重新添加。
我只是嘗試這樣做,這兩種方法的工作。我在XP上,並添加了myComLib.tlb作爲項目的參考。你在XP或Win7上? – 2012-02-03 08:20:01
我正在使用xp。我已經註冊了圖書館,也被複制到項目文件夾(DLL和TLB文件)我也已經添加到項目的引用。這就是早期綁定起作用的原因。後期的約束也應該起作用。我也嘗試添加引用到scrrun.dll,但仍然沒有。 – reven 2012-02-03 08:53:55