Мой клиент имеет программу VB6, установленную на большом количестве компьютеров по всему миру. Теперь необходимо получить доступ к внешней системе через REST API. Я создал библиотеку классов в VB.Net, ориентированную на .NET Framework 4. (Это самая последняя версия, установленная повсеместно.) DLL предоставляет около десятка открытых функций и подпрограмм и ~ 40 свойств. Я протестировал DLL с помощью этого кода PowerShell:
[System.Reflection.Assembly]::LoadFile( "$directorypath\Debug\MyExample.dll")
$quotaInstance = new-object MyExample.ComClass1
Все методы и свойства доступны из сценария PS. Однако когда я загружаю DLL в IDE VB6, браузер объектов показывает только методы, а не свойства. Если я не могу понять это, мне придется перекодировать их как набор функций и подпрограмм. Я ненавижу эту идею.
Вопрос Как сделать свойства видимыми для COM в .NET DLL (методы ДОЛЖНЫ работать) выглядит аналогично, но я не (явно ниже) использую интерфейс, и я не уверен, что на этот вопрос когда-либо был дан ответ
Кто-нибудь знает, что происходит, и (что более важно), как это исправить? Спасибо!
Обновление: люди просили посмотреть мой код, так что здесь приведен упрощенный пример. Я полагаю из InterfaceId, что Visual Studio Community 2017 создает какой-то интерфейс для меня.
<ComClass(Example.ClassId, Example.InterfaceId, Example.EventsId)>
Public Class Example
#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 = "099bfc91-1f82-4a26-b1e0-d9645bb1714d"
Public Const InterfaceId As String = "13e9763d-455c-4d89-8323-cc4e7ae7648e"
Public Const EventsId As String = "773feeba-e635-4411-b175-30b345afa841"
#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
' *** Auto-implemented properties
' When you declare an auto-implemented property, Visual Basic automatically
' creates a hidden Private field called the backing field to contain the
' Property value. The backing field name is the auto-implemented Property
' name preceded by an underscore (_).
Public Property Foo As String
Public Property Bar As Integer
Public Function InitiateSession(ExampleServer As String) As Boolean
' Creates a new API_session.
' Returns True if the connection was successful, otherwise False
' ...
End Function
Public Sub CloseSession()
' Releases the current API_session.
' ...
End Sub
End Class