Имя: Пароль:
1C
1С v8
вопрос по VK на базе v8napi
,
0 vde69
 
11.10.12
15:59
наступил на грабли с ВК,

собственно есть необходимость передавать из/в ВК числа LongWord (без знаковые 4 байтные)

сейчас использую для получения
i := V8AsInt(@Params[1]);

и для передачи
V8SetInt(RetValue, i)

нужно заменить эти функции, но вот не соображу на что....

зы проблемма когда пытаюсь работать с большими числами (в 1с получаю отрицательное число)
1 awa15
 
11.10.12
17:42
В качестве костылей могу посоветовать просто преобразовывать в 1С числа, типа такого
i = ?(i < 0, i + 4294967296, i);
и обратно
i = ?(i > 2147483647, i - 4294967296, i);
2 vde69
 
11.10.12
17:52
(1) я это сделал и сам, только все равно сабж нужно решать
3 vde69
 
11.10.12
17:57
(1) ты лучше скажи чего значить 3 первых байта в схеме (EF BB BF)
4 qeos
 
11.10.12
17:59
так вродеж в 1с не инты используются..
5 vde69
 
11.10.12
17:59
(3)+ вероятно это дискриптр что дальше идет "поток" ?
6 acsent
 
11.10.12
17:59
(3) UTF BOM
7 vde69
 
11.10.12
18:02
(6) спасибо
8 H A D G E H O G s
 
12.10.12
02:10
Вижу в v8napi.pas следующее.

procedure TV8UserObject.V8SetCard(V: PV8Variant; Value: Cardinal);
begin
 V8ClearVar(V);
 V.vt := VTYPE_UINT;
 V.VarEnum.ulVal := Value;
end;

Толи я запиливал, толи 1С, толи это не работает, хз, дома не стоит Дельфя, завтра притащу тока.

Ну и по аналогии я бы попробовал запилить типа:

function V8AsCard(V: PV8Variant): Cardinal;
begin
 if (V.vt and VTYPE_TYPEMASK) = VTYPE_UINT then
   result := V.VarEnum.uintVal;
 else
   result := AsCardinal(V);
end;

И аналогично AsCardinal()

Но ВРОДЕ БЫ у native api были проблемы с передачью Cardinal, и они обесчали пофиксить, х.з.
9 vde69
 
12.10.12
09:04
(8) Cardinal - тип который не гарантировано 4 байта имеет, мне нужен именно LongWord

но дело даже не в этом, пробовал я запилить по подобию - но чего то не выходит, уж не знаю даже почему....

пока буду юзать заплатку в 1с но на будующее все равно нужно допилить
10 H A D G E H O G s
 
12.10.12
10:22
(9)
Cardinal - тип который не гарантировано 4 байта имеет


Фига себе.
Как это негарантированно О_О
11 vde69
 
12.10.12
11:23
(10) http://www.delphibasics.ru/Cardinal.php

Тип Cardinal это Integer, размер которого не гарантируется. Это основное целое число без знака, и в настоящее время имеет такую же вместимость как LongWord : 32 бита.

гарантированую длину имеют типы
byte, word, LongWord

остальные - нет
AdBlock убивает бесплатный контент. 1Сергей