Проблема возврата объекта из VB.NET COM Assembly в VBA (Access)
У меня есть сборка в VB .NET 2.0, которую я пытаюсь использовать для вызова веб-службы.
Это будет видимым COM и вернет результаты в Access в VBA.
Сборка.NET проходит все тесты и работает отлично.
При вызове методов из VBA возникли ошибки "Объект не поддерживает это свойство или метод".
Я разбил его на определенный возвращаемый объект и добавил несколько методов тестирования в.NET DLL.
Есть объект "Пациент", который я хочу вернуть. Похоже на это (очень легко протестировать):
Option Strict On
Option Explicit On
<ComClass(Patient.ClassId, Patient.InterfaceId, Patient.EventsId)> _
Public Class Patient
#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 = "672dfbd9-8f3a-4ba2-a33d-89fef868f2b9"
Public Const InterfaceId As String = "74a9c54c-4427-4d31-8220-3258ecda345d"
Public Const EventsId As String = "dc25515e-1bb7-4a66-97d5-270c00d792a9"
#End Region
Public Sub New()
MyBase.New()
End Sub
Public Property StorePatientID() As Integer
Get
Return m_StorePatientID
End Get
Set(ByVal value As Integer)
m_StorePatientID = value
End Set
End Property
Private m_StorePatientID As Integer
End Class
Так что на самом деле все так просто, как объект.
У меня есть метод, который просто возвращает фиктивную запись, просто чтобы проверить это:
Public Function GetPatientTest() As Patient
Dim patient As New Patient
patient.StorePatientID = 99
Return patient
End Function
Это терпит неудачу с указанной ошибкой.
ТЕМ НЕ МЕНИЕ,
Этот метод успешен!
Public Function GetPatientArrayTest() As Patient()
Dim strings As New List(Of Patient)
Dim patient As New Patient
patient.StorePatientID = 99
strings.Add(patient)
Return strings.ToArray
End Function
DLL становится видимой через страницу "Свойства". Сборки для проекта /bin/debug, всегда делайте пересборку. Кажется, всегда обновляются новыми методами и т. Д., Когда я смотрю на него в VBA, поэтому не думайте, что он смотрит на старую версию.
Очевидно нет смешных зависимостей с этими методами.
Действительно действительно борется с этим.
РЕДАКТИРОВАТЬ:
Обновление 16/03/2011 - Добавлен скрипт VBA
Public Function FindPatientsTest(ByVal surname As String, ByVal surnameBeginsWith As Boolean, ByVal forename As String, ByVal forenameBeginsWith As Boolean, ByVal dateOfBirth As String)
Dim token As String
token = Login()
Dim patient As SCIStoreWS60.patient
Set patient = New SCIStoreWS60.patient
'// This doesn't work.
'// When adding a "Watch" to the function, I can see it returns an "Object/Patient" and is the correct results
'// When adding a "Watch" to the variable "patient" I can see it is a "Patient/Patient"
patient = sciStore.GetPatientTest()
'// This works fine
Dim something As Variant
something = sciStore.GetPatientArrayTest()
End Function
Обновление 16/03/2011 5 минут спустя - наказывая себя
Извините, я просто решил это.
Мне нужно "установить" переменную пациента.
Set patient = sciStore.GetPatientTest()
Почему мне не нужно было делать это для варианта "что-то"?