Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Передаваемые параметры через интерфейс COM

1.8K
29 сентября 2008 года
Arkady
153 / / 18.12.2007
Здравствуйте.
В рекомендуемой тут замечательной книге Калверт Ч. Рейдорф К. Borland C++ Builder Энциклопедия пользователя указан такой перечень типов, которые разрешается использовать:
char, unsigned char, ... unsigned long, ..., SafeArray(TSafeArray<>), Variant.
При этом параметры имеющие тип [Out, Retval] должны быть указателями. И подтверждается, что указатели на все эти типы - должны работать.

Однако при создании функций для интерфейса в TLB, при установлении параметра в выпадающем окне есть огромное количество типов, в том числе указателей (например, VARIANT*), но нет указателя на unsigned long, а так же присутствует только SAFEARRAY(long), и никакой другой.

Ну типы на выбор есть типы на выбор, они не обязаны содержать в себе все возможные типы. Однако когда я руками дописал к параметру unsigned long звездочку (unsigned long *), всё прекрасно скомпилилось, но VBA, при импорте в него этой ТЛБ, не смог работать с этой переменной.

Почему это так? Может быть надо поставить какой-то аддон к Borland C++ 6 Builder? Если существует - может быть поделитесь ссылкой.

Правильно ли я понимаю, что для возвращения значений переменных, необходимо использовать VARIANT* и ни в коем случае не unsigned long*?...
И что в таком случае надо использовать в качестве параметра для передачи SafeArray, у которого элементы имеют разные типы?
11
29 сентября 2008 года
oxotnik333
2.9K / / 03.08.2007
VARIANT хорош тем что можно в него разные виды данных напихать
SAFEARRAY это практически обычный массив, определённого типа, т.е. в него не удастся засунуть строку и число, если же возникнет такая необходимость, можно сделать SAFEARRAY of VARIANT
PS: мож VBA не понимает unsigned long (*), делай все через VARIANT
1.8K
29 сентября 2008 года
Arkady
153 / / 18.12.2007
Цитата: oxotnik333
VARIANT хорош тем что можно в него разные виды данных напихать
SAFEARRAY это практически обычный массив, определённого типа, т.е. в него не удастся засунуть строку и число, если же возникнет такая необходимость, можно сделать SAFEARRAY of VARIANT
PS: мож VBA не понимает unsigned long (*), делай все через VARIANT


Вот-вот, я так и сделал, все мои SafeArray сделаны of Variant... но при этом сам Builder почему-то предлагает только SafeArray(long) и ничего более... увидев проблему с unsigned long, я подозреваю, что она будет и там.
Теперь буду передавать вариантом, как советуете =) Просто странно, если стандарт COM поддерживает unsigned long, то VBA, который поддерживает этот стандарт, должен бы уметь это интерпретировать..

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог