Автор | Сообщение |
|
| |
Пост N: 2
Зарегистрирован: 06.03.24
|
|
Отправлено: 06.03.24 20:37. Заголовок: error C2223: выражение слева от "->item" должно указывать на структуру или объединение
Добрый день. В чем может быть проблема? Ошибка в коде #pragma BEGINDUMP #include "hbapi.h" #include "hbapiitm.h" HB_FUNC( INC ) { PHB_ITEM pItem = hb_param( 1, HB_IT_INTEGER ); pItem->item.asInteger.value++; hb_retni( 0 ); } #pragma ENDDUMP
|
|
|
Ответов - 11
[только новые]
|
|
|
| Администратор
|
Пост N: 4152
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.03.24 08:19. Заголовок: В Харборе внутреннос..
В Харборе внутренности HB_ITEM доступны только для модулей vm при сборке самого харбора См в hbapi.h: #ifdef _HB_API_INTERNAL_ ... В программах предусмотрен только доступ через функции семейств hb_itemGet*, hb_itemPut* и им подобным
|
|
|
|
| Администратор
|
Пост N: 4153
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.03.24 08:26. Заголовок: Собрать такую функци..
Собрать такую функцию можно, сделав ее не в модуле prg, а в модуле c: #include "hbvmint.h" #include "hbapi.h" #include "hbapiitm.h" HB_FUNC( INC ) { PHB_ITEM pItem = hb_param( 1, HB_IT_INTEGER ); pItem->item.asInteger.value++; hb_retni( 0 ); }
|
|
|
|
| |
Пост N: 3
Зарегистрирован: 06.03.24
|
|
Отправлено: 07.03.24 12:30. Заголовок: Добрый день. Павел, ..
Добрый день. Павел, спасибо за развернутый ответ. Я бы не догадался сделать отдельный файл. Получилось скомпилировать. Но вызов функции не меняет значение переданное по ссылке. //---------- INC(@x) ?x //---------- В чем проблема?
|
|
|
|
| Администратор
|
Пост N: 4154
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.03.24 13:17. Заголовок: Сделал тест: proc m..
Сделал тест: proc main Local i := 0 ? i Inc(@i) ? i retu Результат: 0 1 Вроде меняет
|
|
|
|
| Администратор
|
Пост N: 4155
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.03.24 13:38. Заголовок: Если не использовать..
Если не использовать доступ к внутренним структурам, функцию можно сделать так: HB_FUNC( INC ) { PHB_ITEM pItem = hb_param( 1, HB_IT_INTEGER ); if( pItem && HB_ISBYREF( 1 ) ) hb_storni( hb_itemGetNI( pItem ) + 1, 1 ); hb_ret(); }
|
|
|
|
| |
Пост N: 4
Зарегистрирован: 06.03.24
|
|
Отправлено: 07.03.24 13:52. Заголовок: Да, все работает. Из..
Да, все работает. Извиняюсь не тот exe запустил. Не буду плодить темы. Еще пару вопросов. Озадачился как получить значение как в Java Integer.MAX_VALUE. Решил тупо перебором. Сделал цикл ---------------- x:=0 DO WHILE .T. ?x x++ ENDDO ---------------- Но после 9000 начинает тормозить. Сделал ---------------- FOR i:=1 TO 100000 ?i NEXT ---------------- те же тормоза. Поэтому решил проверить может присвоение тормозит, но INC не решил проблему. Вот как получить Integer.MAX_VALUE? И почему тормозит цикл?
|
|
|
|
| Администратор
|
Пост N: 4156
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.03.24 14:06. Заголовок: Так в харборе в hbde..
Так в харборе в hbdefs.h определены различные #define вроде ULONG_MAX, ULONGLONG_MAX Проблема в том, что они из prg-кода недоступны Можно просто сделать свой модуль вроде lim.ch со соответсвующими определениями Правда они будут разными для 32-битной и 64-битной архитектуры В любом случае цикл здесь не нужен
|
|
|
|
| |
Пост N: 5
Зарегистрирован: 06.03.24
|
|
Отправлено: 07.03.24 14:11. Заголовок: А почему тормозит ци..
А почему тормозит цикл по 9000?
|
|
|
|
| |
Пост N: 6
Зарегистрирован: 06.03.24
|
|
Отправлено: 07.03.24 14:14. Заголовок: после 9000..
после 9000
|
|
|
|
| Администратор
|
Пост N: 4157
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.03.24 14:16. Заголовок: Тормозит не цикл, а ..
Тормозит не цикл, а вывод на консоль, т.е. операция ?i Цикл без вывода выполняется мгновенно
|
|
|
|
| |
Пост N: 7
Зарегистрирован: 06.03.24
|
|
Отправлено: 07.03.24 15:39. Заголовок: Спасибо...
Спасибо.
|
|
|
|