Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Указатель на указатель неизвестного типа
Форум на CrossPlatform.RU > Разработка > С\С++
Pahen
Сложно сформулировать, но:

Существует dll, С - функция которой возвращает TYPE **var, *var потом необходим для использования других функций данной библиотеки. Структура TYPE неизвестна, заголовочников нет. Какой тип можно использовать, чтобы хранить это значение в программе? void*?
Алексей1153
можно void* использовать

только непонятно, как так: функция возвращает TYPE **var , а потом надо передавать TYPE *var ? Разве что только через аргумент возвращает - тогда всё встаёт на свои места ))
Pahen
Цитата(Алексей1153 @ 16.3.2011, 13:42) *
можно void* использовать

только непонятно, как так: функция возвращает TYPE **var , а потом надо передавать TYPE *var ? Разве что только через аргумент возвращает - тогда всё встаёт на свои места ))
Да да, прошу прощения, через аргумент. Так она возвращает int как код ошибки. :) А указатель на структуру - через аргумент.
Iron Bug
без разницы, как она это возвращает, но если изначально есть указатель на указатель, а потом нужно разыменование этого указателя, то всё равно потребуется хотя бы имя типа TYPE. ибо *void - некорректное выражение.
Disaron
Блин. Увидел пост и вспомнил аналогичную тему.
Имеем в dll С-шную функцию:
int DECL cr_init(int tm_flag,
                int *init_mode,
                CR_INIT **init_struct);


Предполагаю написать C++ обертку для нескольких функций из этой либы для использования в Qt проекте.
Согласно документации
Цитата
init_struct возвращаемый указатель на созданный контекст, используемый другими функциями библиотеки.

Для подключения библиотеки буду использовать QLibrary, потому как заголовочников, как и у ТС нету и тип CR_INIT недокументирован.

И вот тут у меня наступает фундаментальный ступор - какой и почему тип надо использовать для подстановки в init_struct? Чувчтвую что что-то где-то не дочитал и теперь страдаю :(
Огромное спасибо тому, кто минимально разжует что мне делать.
Iron Bug
Цитата(Disaron @ 16.3.2011, 23:30) *
заголовочников, как и у ТС нету и тип CR_INIT недокументирован.

создатель библиотеки всегда поставляет заголовочники или описания типов. иначе вся библиотека просто бесполезна.
по идее, должно быть описание структуры, либо заголовочник.
ну, можно попробовать void*, если нигде не требуется приведение типов или явная инициализация этой структуры.
что-то типа:

void * ptr;
cr_init(tm_flag,init_mode,&ptr);


и потом уже ptr проставлять в вызовах других функций.
Алексей1153
Iron Bug,
Цитата(Iron Bug @ 16.3.2011, 23:20) *
то всё равно потребуется хотя бы имя типа TYPE. ибо *void - некорректное выражение.

не потребуется в том случае, если самому разыменовывать не нужно, а лишь нужно предоставить контекст в очередную функцию объекта
Rocky
Алексей1153, опять вырываешь слова из контекста. Разве Iron Bug это не написала?

Цитата(Iron Bug @ 16.3.2011, 21:20) *
без разницы, как она это возвращает, но если изначально есть указатель на указатель, а потом нужно разыменование этого указателя, то всё равно потребуется хотя бы имя типа TYPE. ибо *void - некорректное выражение.
Алексей1153
Rocky, вообще-то она написала диаметрально противоположно, а в моей фразе не нужно имя типа и не нужно разыменование
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.