|
v7: Представление булева в 7.7... | ☑ | ||
---|---|---|---|---|
0
MWWRuza
гуру
15.10.18
✎
13:26
|
Добрый день!
Есть некий драйвер, по технологии "COM", естественно разрабатывался изначально под снеговика, с учетом "Требования к разработке драйверов подключаемого оборудования. Версия 2.4", но и под клюшками работает. В принципе, все более-менее нормально, но есть одно НО! По требованиям к разработке, "Тип возвращаемого значения" - "BOOL". Под восьмеркой, так и возвращает: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-244.jpg А вот под 7.7, логично было-бы предположить, что должен возвращать 1/0... А вот фиг там: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-243.jpg Какое-то непонятное число... Почему? Косяк в написании драйвера, или я что-то не так делаю? Если я, то как правильно интерпретировать в 7.7 результат выполнения метода? |
|||
1
MWWRuza
гуру
15.10.18
✎
13:30
|
В дополнение - под 7.7 драйвер отрабатывает метод "ЗакрытьСмену", смена в ККТ закрывается, Z-отчет печатается, все нормально... Только с возвращаемым значением непонятка...
|
|||
2
big
15.10.18
✎
13:38
|
А что говорит ТипЗначенияСтр(ВыхПар)? А если сделать Число(ВыхПар) - что покажет?
ЕМНИП при работе из 7-ки с СОМ ложь это 0, а истина -1 |
|||
3
ADirks
15.10.18
✎
13:39
|
(0) в спецификации COM
True == -1 False == любое другое значение (но обычно 0) |
|||
4
MWWRuza
гуру
15.10.18
✎
14:03
|
(2) Сейчас попробую, но, то, что значение без кавычек, наводит на мысль, что это и так число...
(3) Это понятно... Но, тут то не так... Да, в дополнение - если принудительно внести в исполнение метода ошибку, например передать пустой первый параметр, то метод не исполняется и возвращается: Результат = 1179648... Бред какой-то. Конечно, если бы быть уверенным, что так будет всегда, то написать функцию преобразования этих непонятных чисел в 1/0 две секунды, три строчки. Но, где гарантия, что это не абстрактные, случайные числа? Может они от чего-то зависят, и сейчас такие а вдругой момент будут другие? Как узнать? |
|||
5
MWWRuza
гуру
15.10.18
✎
14:09
|
(2) Вот:
ТипЗначенияСтр(Результат) = "Число" Число(Результат) = 1179648 Результат в данном случае "Ложь", так, как смена уже открыта, но, это в принципе без разницы. |
|||
6
MWWRuza
гуру
15.10.18
✎
14:19
|
(2) ВыхПар - в данном примере это строка, она результат исполнения другого метода: Spark.ПолучитьОшибку(ВыхПар); Из описания технологии: "Возвращает код и описание последней произошедшей ошибки." Тут все правильно работает.
Нас интересует другая переменная - "Результат". |
|||
7
АЛьФ
15.10.18
✎
14:31
|
1179648 = 0х00120000
Явно какая-то константа возвращается. |
|||
8
ADirks
15.10.18
✎
14:35
|
(+7) Причём, ребята похоже решили таким образом двух зайцев убить. Типа, и False, и код ошибки заодно.
А может, случайно получилось :) |
|||
9
MWWRuza
гуру
15.10.18
✎
14:43
|
(8) Скорее всего случайно. На код ошибки не похоже. Одинаковая фигня возвращается, когда принудительно ошибку вношу, передав пустой первый параметр, и когда ошибка возникает потому, что "смена уже открыта".
Ну да хрен с ней, с "False" имеет право на жизнь, по спецификации - "любое другое значение". Но, вот с "True" хуже... Должно быть -1 или 1, но ни как ни эта абракадабра - 1245183... |
|||
10
Cool_Profi
15.10.18
✎
14:49
|
ложь - 0, не ложь (ака истина) не 0.
В чём проблема? |
|||
11
ADirks
15.10.18
✎
14:54
|
хм...
похоже, что всё-же какое-то -1, но не врублюсь как 1245183 == 0x12FFFF (unsigned short)(-1) == 0xFFFF шо за 0x12 не догоняю |
|||
12
MWWRuza
гуру
15.10.18
✎
14:56
|
(10) Да был бы там 0, не было бы проблем. А там почему-то 1179648. И не факт, что всегда, когда должен быть 0, там именно эта комбинация чисел будет :-(
|
|||
13
Cool_Profi
15.10.18
✎
15:01
|
(12) Там 0? Нет. Так тебе ещё чего надо?
|
|||
14
trad
15.10.18
✎
15:10
|
1245183 == 0x12FFFF
1179648 == 0x120000 это VARIANT, где 0x12 - VT_TYPE = VT_UI2 0xFFFF и 0x0000 - собственно сам UI2, который в свою очередь соответствует TRUE и FALSE |
|||
15
MWWRuza
гуру
15.10.18
✎
15:42
|
(13) Так там никогда не бывает 0. Даже, когда метод не отработал.
(14) А вот это, очень похоже на правду... Значит, можно считать, что 1245183 это 1, а 1179648 это 0. Тогда, все становится на свои места. |
|||
16
MWWRuza
гуру
15.10.18
✎
16:49
|
В общем, как я понял из общения с разработчиком драйвера, в зависимости от того, из какой версии 1С он используется, надо по разному возврат значения делать. Для восьмерки возвращать булево, а для 7.7 число 1/0. Только как из драйвера можно определить, из какой 1С его вызвали? Есть какие-то методы? Драйвер на C++ написан... Кто-нибудь сталкивался с такой задачей?
|
|||
17
MWWRuza
гуру
15.10.18
✎
19:49
|
Всем спасибо!
Вопрос решен. Разработчик исправил что-то в драйвере, теперь в 7.7 возвращает -1/0, в восьмерке, как и было, булево. Главное - понять, в чем дело, остальное - дело техники :-) |
|||
18
Kigo_Kigo
15.10.18
✎
21:27
|
часто замечаю, походу разрабы симофорят наш форум :)
|
|||
19
MWWRuza
гуру
16.10.18
✎
10:46
|
(18) Ну, не знаю... Наверняка. И это правильно.
Но, в данном случае, я ему сам ссылку на эту ветку форума дал. В моих интересах, что-бы драйвер работал нормально в том числе и под клюшками. У меня на 7.7 с такими кассами пока еще клиентов много. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |