On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 11 [только новые]


Администратор




Пост N: 4152
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.03.24 08:19. Заголовок: В Харборе внутреннос..


В Харборе внутренности HB_ITEM доступны только для модулей vm при сборке самого харбора

См в hbapi.h:

#ifdef _HB_API_INTERNAL_
...

В программах предусмотрен только доступ через функции семейств hb_itemGet*, hb_itemPut* и им подобным

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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 );
}

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3
Зарегистрирован: 06.03.24
ссылка на сообщение  Отправлено: 07.03.24 12:30. Заголовок: Добрый день. Павел, ..


Добрый день.
Павел, спасибо за развернутый ответ.
Я бы не догадался сделать отдельный файл.
Получилось скомпилировать.
Но вызов функции не меняет значение переданное по ссылке.
//----------
INC(@x)
?x
//----------
В чем проблема?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4154
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.03.24 13:17. Заголовок: Сделал тест: proc m..


Сделал тест:

proc main
Local i := 0
? i
Inc(@i)
? i
retu

Результат:
0
1


Вроде меняет

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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();
}

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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?
И почему тормозит цикл?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4156
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.03.24 14:06. Заголовок: Так в харборе в hbde..


Так в харборе в hbdefs.h определены различные #define вроде ULONG_MAX, ULONGLONG_MAX

Проблема в том, что они из prg-кода недоступны

Можно просто сделать свой модуль вроде lim.ch со соответсвующими определениями
Правда они будут разными для 32-битной и 64-битной архитектуры
В любом случае цикл здесь не нужен

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 5
Зарегистрирован: 06.03.24
ссылка на сообщение  Отправлено: 07.03.24 14:11. Заголовок: А почему тормозит ци..


А почему тормозит цикл по 9000?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 6
Зарегистрирован: 06.03.24
ссылка на сообщение  Отправлено: 07.03.24 14:14. Заголовок: после 9000..


после 9000

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4157
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.03.24 14:16. Заголовок: Тормозит не цикл, а ..


Тормозит не цикл, а вывод на консоль, т.е. операция

?i

Цикл без вывода выполняется мгновенно

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 7
Зарегистрирован: 06.03.24
ссылка на сообщение  Отправлено: 07.03.24 15:39. Заголовок: Спасибо...


Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 300
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет