Преобразование типа "String" в тип "String" недопустимо.

Я занимаюсь переносом старой надстройки Excel, написанной на VBA, на VB .NET. Надстройка Excel взаимодействует с рядом внешних объектов com. Код примерно выглядит так:

Dim hurr as Object
Dim durr as String

hurr = CreateObject("COM Object")
durr = hurr.getString

Что я пытаюсь сделать, так это прочитать строку из COM-объекта и получить ее в durr для последующего использования в моей программе.

Эта вторая строка приводит к исключению, опубликованному выше. Если я попытаюсь выполнить кастинг с помощью CStr/CType, я получу то же исключение. Окно наблюдения визуальной студии сообщает о типе hurr.getString как «System.__ComObject», тогда как окно наблюдения VBA сообщает о типе как «Variant/Object/String». Microsoft.VisualBasic.Information.TypeName(hurr.getString) говорит, что тип "String". Любые идеи, как я должен заставить это работать?

Спасибо!


person FreaknBigPanda    schedule 21.12.2009    source источник


Ответы (1)


Это смешно, но я решил опубликовать ответ здесь для полноты картины. Решение состояло в том, чтобы добавить пару квадратных скобок в конец hurr.getString.

поэтому рабочий код выглядит так:

Dim hurr as Object
Dim durr as String

hurr = CreateObject("COM Object")
durr = hurr.getString()

Приведенный выше код дал мне исключение приведения, и по какой-то причине ему нужны скобки для работы здесь. Я просто добавлю, что работа с com-объектами с поздним связыванием ужасна, и ее следует избегать любой ценой.

person FreaknBigPanda    schedule 21.12.2009