Как читать члены пользовательского объекта класса VBA, переданного как COM__Object, с VB.net?(UIPath) - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть функция VBA, которая возвращает объект моего собственного модуля класса "CInputDBEntries".

UIPath получает этот объект как COM__Object, и для его чтения мне нужно выполнить некоторое преобразование CType.Однако независимо от того, как я это делаю, я не могу получить доступ к элементам (значениям) объекта.

Я уже пытался преобразовать его в «Объект», но не могу получить доступ к значениям.Я также попытался сохранить несколько объектов класса как коллекцию, но это не помогло при преобразовании CType, потому что он содержит ошибки (VBACollection to Microsoft.VisualBasic.Collection = COM CastTypeException)

Я также разместил это на форумах UIPath: https://forum.uipath.com/t/invoke-vba-how-to-read-the-retrieved-com-object-in-uipath-vba-function-returns-custom-type/96115

Определение класса:

Private strTitle As String
Private strValue As String
Private boolIntegrity As Boolean

Метод:

Public Function ReadRelevantEntries() As CInputDBEntries
   Dim entry As CInputDBEntries

   entry.Title = "title"
   entry.Val = "value"
   entry.Integrity = True

   Set ReadRelevantEntries = entry
End Function

В настоящее время мое преобразование таково: CType (listExcelEntries, Object)

Ожидаемый результатчтобы можно было извлечь значения из COM__Object, чтобы я мог прочитать 2 строки и мою переменную bool.

1 Ответ

0 голосов
/ 19 февраля 2019

Нашли решение:

Это неправильный подход

var propertyInfo = comObject.GetType().GetProperty("PropertyName")

Это правильный подход

//get the value of comObject.PropertyName
object propertyValue = comObject.GetType().InvokeMember("PropertyName", System.Reflection.BindingFlags.GetProperty, null, comObject, null);

Кредиты: https://smehrozalam.wordpress.com/2010/02/16/c-using-reflection-with-com-objects/

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