![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
елки |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 27.1.2016 Репутация: нет Всего: нет |
Всем привет. Сейчас работаю с некоторой динамической библиотекой(*.dll). Пытаюсь из этой dll использовать некую функцию GetTitleIDList. Прототип функции в Visual C++ выглядит так GetTitleIDList(VARIANT_BOOL , int, int, int*, VARIANT*,VARIANT*).
В документации к dll эта функция описывается так:
GetTitleIDList( bIncludeID, minID, maxID, count, listID, listTITLE ) Input:
Теперь как я пытаюсь это использовать.
пробовал использовать VARIANT
Подскажите в чём моя ошибка и как лучше исправить? Это сообщение отредактировал(а) елки - 11.12.2016, 19:45 |
||||||
|
|||||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
А что у Вас с UNICODE?
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
елки |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 27.1.2016 Репутация: нет Всего: нет |
||||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Ну так у Вас по умолчанию может быть выставлено UNICODE, а GetTitleIDList() может возвращать простое ASCII. Вот у Вас и иероглифы в MessageBox().
PS Такое возможно, но не обязательно. Но не мешает проверить))) Добавлено через 29 секунд Попробуйте MessageBoxA(). -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
елки |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 27.1.2016 Репутация: нет Всего: нет |
feodorv, попробовал не получилось. думаю дело не в кодировке. предпоследнее значение в этой функции вообще целое число и тоже не хочет выводиться. пробовал вот такой код.
|
|||
|
||||
vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: 0 Всего: 0 |
не увидел функции VariantInit
|
|||
|
||||
миг |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 15.9.2008 Репутация: нет Всего: 1 |
VariantInit - устанавливает флаг VT_EMPTY Это означает пустой вариант. Если хотим поместить данные, то должны изменить флаг VT_тип данных которые нужно поместить в вариант. Можно теоретически сделать пустой вариант и пусть функция GetTitleIdList сама попробует установить ей нужный флаг и записать данные.
--------------------
Oaks may fall when reeds stand the storm. |
|||
|
||||
vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: 0 Всего: 0 |
я всегда так и делал и проблем с этим типом никогда небыло. |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
А я вот соглашусь с vol4ek. Как-то это все жестко выглядит:
Я так понимаю, что в GetTitleIDList() отправляются пустые VARIANT, а возвращаются заполненные, которые потом высвобождать нужно будет. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
миг |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 15.9.2008 Репутация: нет Всего: 1 |
vol4ek, VariantInit эквивалентно записи
А если известно какие типы данных будут хранится в переменной, то почему нельзя сразу записать t.vt=VT_ARRAY и т.д.? Другое дело вызываемая функция могла установить другой флаг. Добавлено через 1 минуту и 21 секунду
Да именно так. Если верить описанию этой функции. --------------------
Oaks may fall when reeds stand the storm. |
||||
|
|||||
vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: 0 Всего: 0 |
я вкурсе чем занимается VariantInit() и думаю с флагом VT_EMPTY и надо работать. пусть GetTitleIDList сама ставит нужные флаги. Наврятли функцию инициализации зря придумали. |
|||
|
||||
елки |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 27.1.2016 Репутация: нет Всего: нет |
vol4ek, вот если написать так
то при вызове функции программа падает и запускается отладчик. |
|||
|
||||
елки |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 27.1.2016 Репутация: нет Всего: нет |
Всем спасибо. у меня наконец-то получилось, то что нужно.
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Неправильно. Работает у вас чисто случайно - места в IDArray хватило на VARIANT и вы его (IDArray) потом не используете
Вариант из предыдущего сообщения был почти правильный. Надо так:
|
|||
|
||||
миг |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 15.9.2008 Репутация: нет Всего: 1 |
Кстати можно еще использовать
Но VARIANT тоже сработает --------------------
Oaks may fall when reeds stand the storm. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |