Καλό χειμώνα (=διακοπές τέλος) σε όλους :)
Έχω φτιάξει ένα DLL σε VB.Net 2005 (32bit περιβάλλον) και θέλω να το χρησιμοποιήσω σε vb6/asp με late binding (σε 64bit περιβάλλον).
Αρχικά το μόνο που έκανα ήταν να τσεκάρω το Register for COM Interop αλλά όταν είδα ότι δεν είχα το επιθυμητό αποτέλεσμα έψαξα και βρήκα αυτό http://blog.danbartels.com/archive/2004/09/07/180.aspx
Πρόσθεσα στο Class Library project μου ένα COM Class Item από το Templates list οπότε ο κώδικας είχε ως εξής :
<ComClass(ComObj.ClassId, ComObj.InterfaceId, ComObj.EventsId)> _
Public
Class ComObj
#
Region "COM GUIDs"
' These GUIDs provide the COM identity for this class
' and its COM interfaces. If you change them, existing
' clients will no longer be able to access the class.
Public Const ClassId As String = "80f92a09-b9b8-487f-a03f-2d6f6185515d"
Public Const InterfaceId As String = "629fd71b-783a-4779-bc19-45e56b090a2c"
Public Const EventsId As String = "0b2179b9-f493-45ee-937f-6eb89f97d357"
#
End Region
' A creatable COM class must have a Public Sub New()
' with no parameters, otherwise, the class will not be
' registered in the COM registry and cannot be created
' via CreateObject.
Public Sub New()
MyBase.New()
End Sub
Private m_strErrMsg As String
Public Property ErrorMessage() As String
Get
Return m_strErrMsg
End Get
Set(ByVal value As String)
m_strErrMsg = value
End Set
End Property
Public Sub ChangeMessage()
ErrorMessage =
"Now it's changed"
End Sub
End
Class
(Το Region "COM GUIDs" δημιουργήθηκε από την VB)
Το έκανα compile και προσπάθησα να το χρησιμοποιήσω από τα 64bit Windows (χρησιμοποίησα το regasm για να κάνω register το TLB) με ένα vb script:
set o = wscript.createobject("TestComObj.ComObj")
o.errormessage="Test"
wscript.echo o.errormessage
set o = nothing
Το μήνυμα που λαμβάνω είναι : Could not create object named "TestComObj.ComObj"
Αυτό που με μπερδεύει περισσότερο είναι ότι ψάχνοντας στη Registry για TestComObj.ComObj το βρίσκω κάτω από το HKEY_CLASSES_ROOT\CLSID\{....
Το ίδιο πρόβλημα έχω και σε 32bit windows ενώ στο μηχάνημα που έφτιαξα το DLL, το σκριπτάκι παίζει μια χαρά.
Τι είναι αυτό που κάνω λάθος; Πώς αλλιώς να κάνω register TLB σε 64bit Windows;