crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Указатель на указатель неизвестного типа
Гость_Pahen_*
сообщение 16.3.2011, 12:10
Сообщение #1





Гости








    


Сложно сформулировать, но:

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


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


можно void* использовать

только непонятно, как так: функция возвращает TYPE **var , а потом надо передавать TYPE *var ? Разве что только через аргумент возвращает - тогда всё встаёт на свои места ))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Pahen_*
сообщение 16.3.2011, 14:38
Сообщение #3





Гости








    


Цитата(Алексей1153 @ 16.3.2011, 13:42) *
можно void* использовать

только непонятно, как так: функция возвращает TYPE **var , а потом надо передавать TYPE *var ? Разве что только через аргумент возвращает - тогда всё встаёт на свои места ))
Да да, прошу прощения, через аргумент. Так она возвращает int как код ошибки. :) А указатель на структуру - через аргумент.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 16.3.2011, 21:20
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


без разницы, как она это возвращает, но если изначально есть указатель на указатель, а потом нужно разыменование этого указателя, то всё равно потребуется хотя бы имя типа TYPE. ибо *void - некорректное выражение.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Disaron
  опции профиля:
сообщение 16.3.2011, 21:30
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 19.2.2011
Пользователь №: 2420

Спасибо сказали: 0 раз(а)




Репутация:   0  


Блин. Увидел пост и вспомнил аналогичную тему.
Имеем в 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
  опции профиля:
сообщение 16.3.2011, 23:12
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(Disaron @ 16.3.2011, 23:30) *
заголовочников, как и у ТС нету и тип CR_INIT недокументирован.

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

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


и потом уже ptr проставлять в вызовах других функций.

Сообщение отредактировал Iron Bug - 16.3.2011, 23:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 17.3.2011, 10:52
Сообщение #7


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Iron Bug,
Цитата(Iron Bug @ 16.3.2011, 23:20) *
то всё равно потребуется хотя бы имя типа TYPE. ибо *void - некорректное выражение.

не потребуется в том случае, если самому разыменовывать не нужно, а лишь нужно предоставить контекст в очередную функцию объекта
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 17.3.2011, 12:01
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Алексей1153, опять вырываешь слова из контекста. Разве Iron Bug это не написала?

Цитата(Iron Bug @ 16.3.2011, 21:20) *
без разницы, как она это возвращает, но если изначально есть указатель на указатель, а потом нужно разыменование этого указателя, то всё равно потребуется хотя бы имя типа TYPE. ибо *void - некорректное выражение.


Сообщение отредактировал Rocky - 17.3.2011, 12:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.3.2011, 2:10
Сообщение #9


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Rocky, вообще-то она написала диаметрально противоположно, а в моей фразе не нужно имя типа и не нужно разыменование
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 19:40