Проблема возврата объекта из VB.NET COM Assembly в VBA (Access) - PullRequest
0 голосов
/ 16 марта 2011

У меня есть сборка в VB .NET 2.0, которую я пытаюсь использовать для вызова веб-службы.

Это будет видимым COM и вернет результаты в Access в VBA.

.NET Assembly проходит все тесты и отлично работает.

При вызове методов из 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, поэтому не думайте, что он смотрит на старую версию.

Очевидно, нет забавных зависимостей с этими методами.

Действительно действительно с этим борется.

EDIT:

Обновление 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()

Почему мне не нужно было сделать это для варианта "что-то"?

1 Ответ

1 голос
/ 17 марта 2011

Итак, да, вам нужно Set ссылки на объекты, но не массивы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...