ATOL драйвер 10.x
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4664
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 8 раз
- Поблагодарили: 37 раз
ATOL драйвер 10.x
Многие библиотеки на си или делфи однопоточные. При использовании их в mdi окнах вылезают разные сюрпризы. Скорее всего, это тот случай.
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
ATOL драйвер 10.x
Мрак ! Ну хорошо, что хоть сюрпризы относятся к работе функции с открытием окна, а не всех.
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4664
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 8 раз
- Поблагодарили: 37 раз
ATOL драйвер 10.x
Да, речь про открытие их окон. Был случай с библиотекой, которая выгружает данные в тсд, если правильно помню. Она открывала свое окно с прогрессором. Отрабатывала, но затем при выходе из приложения вываливалось окно о попытке обращения в недоступную область памяти. Пришлось сделать окно, из которого был вызов, модальным, тогда все нормализовалось. Это не очень удобно, но, в целом, устроило.
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
ATOL драйвер 10.x
Жуть ! Я это пробовал: открывал NotMDI модальное окно и даже передавал при вызове его {Prop:Handle} - не помогает.
Вообще - проблема достаточно скользкая, т.к. проявляется при первом вызове окна и потом надо перезагружать комп.
За теми кто отстал - не возвращаться. (С) Кодекс
- SergioRaguzini
- Старожил
- Сообщения: 236
- Зарегистрирован: 08 Декабрь 2009, 19:16
- Откуда: Краснодарский край
- Благодарил (а): 6 раз
ATOL драйвер 10.x
Привет Всем!
Потребовалось считать информацию о ФН (в частности, серийный номер ФН), посмотрел документацию, обратил внимание что вызов метода fnQueryData() похож на QueryData()
в load_procedures.clw добавил:
в procedure_eq.clw
в Global Map:
Создал локальную процедуру по аналогии с QueryData() :
хочу получить серийный номер, вызываю:
ошибок исполнения нет, но, к сожалению, серийный номер тоже не отображается (пусто)
При аналогичной операции с QueryData заводской номер отображается корректно, а вот при информации по ФН нет....
Пытаюсь который день, но никак не пойму в чем проблема?
Караул, Help!
Потребовалось считать информацию о ФН (в частности, серийный номер ФН), посмотрел документацию, обратил внимание что вызов метода fnQueryData() похож на QueryData()
в load_procedures.clw добавил:
Код: Выделить всё
cstr_libfptr_fn_query_data CSTRING('libfptr_fn_query_data')
Код: Выделить всё
_libfptr_fn_query_data_ LONG,STATIC,NAME('libfptr_fn_query_data')
...
cstr_libfptr_fn_query_data CSTRING('libfptr_fn_query_data')
Код: Выделить всё
libfptr_fn_query_data(LONG fptr),LONG,RAW,C,PROC,DLL(_libfptr_fn_query_data_)
Код: Выделить всё
!- - = * = - - = * = - - = * = - - = * = - - = * = - - = * = - - = * = - -!
Atol10.fnQueryData PROCEDURE()!,LONG,PROC
!- - = * = - - = * = - - = * = - - = * = - - = * = - - = * = - - = * = - -!
CODE
IF ~ SELF.FlagLoaded THEN RETURN LIBFPTR_ERROR END
RETURN libfptr_fn_query_data(SELF.fptr)
!. . . . . к о н е ц п р о ц е д у р ы . . . . . .!
Код: Выделить всё
LOC:fn_Serial STRING(25)
...
fnQueryData PROCEDURE(),LONG,PROC
CODE
ATOL.SetParamInt(LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_FN_INFO)
ATOL.fnQueryData()
LOC:fn_Serial = ATOL.GetParamStr(LIBFPTR_PARAM_SERIAL_NUMBER)
MESSAGE('LOC:fn_Serial = ' & LOC:fn_Serial)
При аналогичной операции с QueryData заводской номер отображается корректно, а вот при информации по ФН нет....
Пытаюсь который день, но никак не пойму в чем проблема?
Караул, Help!
ATOL драйвер 10.x
Иногда помогает парочка UnlockThread() - LockThread()
UnlockThread вызывается перед обращением к OLE-объекту, а LockThread - после обращения.
Если у объекта есть GUI - строго обязательно.
Да, внутри cкобок UnlockThread - LockThread многие кларионовские вычисления недопустимы, передал-получил значения - закрывайся!
UnlockThread вызывается перед обращением к OLE-объекту, а LockThread - после обращения.
Если у объекта есть GUI - строго обязательно.
Да, внутри cкобок UnlockThread - LockThread многие кларионовские вычисления недопустимы, передал-получил значения - закрывайся!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
ATOL драйвер 10.x
О, точно ! Спасибо ! Вот это ещё забыл попробовать с вызовом метода окна настройки
драйвера АТОЛ ДКК10 libfptr_show_properties(). Сейчас сделаем и проверим.
За теми кто отстал - не возвращаться. (С) Кодекс
- SergioRaguzini
- Старожил
- Сообщения: 236
- Зарегистрирован: 08 Декабрь 2009, 19:16
- Откуда: Краснодарский край
- Благодарил (а): 6 раз
ATOL драйвер 10.x
Да, но применительно к данной теме, обращение к методам и свойствам драйвера идет не через OLE...Yufil писал(а): ↑30 Сентябрь 2020, 15:43 Иногда помогает парочка UnlockThread() - LockThread()
UnlockThread вызывается перед обращением к OLE-объекту, а LockThread - после обращения.
Если у объекта есть GUI - строго обязательно.
Да, внутри cкобок UnlockThread - LockThread многие кларионовские вычисления недопустимы, передал-получил значения - закрывайся!
Игорь Столяров писал(а): ↑30 Сентябрь 2020, 18:09 О, точно ! Спасибо ! Вот это ещё забыл попробовать с вызовом метода окна настройки
драйвера АТОЛ ДКК10 libfptr_show_properties(). Сейчас сделаем и проверим.
Код: Выделить всё
IF ~ SELF.FlagLoaded THEN RETURN LIBFPTR_ERROR END
RETURN libfptr_show_properties(SELF.fptr, LIBFPTR_GUI_PARENT_NATIVE, WindowHandle)
А вот информацию о ФН получить пока не могу
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
ATOL драйвер 10.x
Ну про OLE написал Юрий, в справке этого нет. Блокировка применяется к внешним вызовам с интерфейсом.SergioRaguzini писал(а): ↑30 Сентябрь 2020, 18:37 применительно к данной теме, обращение к методам и свойствам драйвера идет не через OLE
Да оно всегда открывается. Но при первом вызове из MDI окна как "с того света" (секунд 30), а если
повторно открыть MDI окно и повторить вызов - всё становится колом, я уже рассказывал об этом.
Проблема-то решена костылём, но хотелось бы понять происходящее ...
Вы прикрутили некий метод по принципу похожести. Смысл действия ?
В справке АТОЛ ДККТ10 есть огромный раздел "Запрос информации из ФН" на человеческом языке.
В нём, в т.ч., подробно описано получение серийного номера ФН. Какие проблемы ?
За теми кто отстал - не возвращаться. (С) Кодекс
- SergioRaguzini
- Старожил
- Сообщения: 236
- Зарегистрирован: 08 Декабрь 2009, 19:16
- Откуда: Краснодарский край
- Благодарил (а): 6 раз
ATOL драйвер 10.x
Игорь, извиняюсь за тугодумие, описание fnQueryData() я сделал интуитивно по аналогии с нормально работающей QueryData()Игорь Столяров писал(а): ↑30 Сентябрь 2020, 19:40 ...В справке АТОЛ ДККТ10 есть огромный раздел "Запрос информации из ФН" на человеческом языке.
В нём, в т.ч., подробно описано получение серийного номера ФН...
Конечно, я читал упомянутый вами раздел справки, но в ней:
для получения серийного номера используются дополнительные size, а что будет эквивалентом в Clarion-программе и как правильно сделать аналогичный вызов для Clarion, я, к сожалению не пойму (+ м.б. мое описание fnQueryData() неверно?) потому и прошу помощи на примере куска кодаlibfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_FN_INFO);
libfptr_fn_query_data(fptr);
std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, &str[0], str.size());
if (size > str.size())
{
str.resize(size);
libfptr_get_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, &str[0], str.size());
}
std::wstring fnSerial = std::wstring(&str[0]);
Спасибо
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
ATOL драйвер 10.x
Куска когда нет, как и фискализированного накопителя.
Но есть немного сочувствия. Зачем Вы так глубоко роете ?
По моему Админ для нас уже всё сделал. На вскидку:
Код: Выделить всё
Atol10.SetParamInt(LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_FN_INFO)
Atol10.FNQueryData()
Message(Atol10.GetParamStr(LIBFPTR_PARAM_SERIAL_NUMBER)) ! Отгружайте здесь Ваш серийник ФН ...
За теми кто отстал - не возвращаться. (С) Кодекс
- SergioRaguzini
- Старожил
- Сообщения: 236
- Зарегистрирован: 08 Декабрь 2009, 19:16
- Откуда: Краснодарский край
- Благодарил (а): 6 раз
ATOL драйвер 10.x
Игорь, Спасибо! Но в том то и дело что это (у меня, к сожалению) не работает! Гляньте несколько сообщений вверх, вот мое с которого я начал сегодняшнее обсуждение:Игорь Столяров писал(а): ↑30 Сентябрь 2020, 21:55 ...На вскидку:Код: Выделить всё
Atol10.SetParamInt(LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_FN_INFO) Atol10.FNQueryData() Message(Atol10.GetParamStr(LIBFPTR_PARAM_SERIAL_NUMBER)) ! Отгружайте здесь Ваш серийник ФН ...
идентичны ! если бы заработало - было бы хорошо, но это не так. Будет минутка - попробуйте у себяхочу получить серийный номер, вызываю:Код: Выделить всё
LOC:fn_Serial STRING(25) ... fnQueryData PROCEDURE(),LONG,PROC CODE ATOL.SetParamInt(LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_FN_INFO) ATOL.fnQueryData() LOC:fn_Serial = ATOL.GetParamStr(LIBFPTR_PARAM_SERIAL_NUMBER) MESSAGE('LOC:fn_Serial = ' & LOC:fn_Serial)
- SergioRaguzini
- Старожил
- Сообщения: 236
- Зарегистрирован: 08 Декабрь 2009, 19:16
- Откуда: Краснодарский край
- Благодарил (а): 6 раз
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
ATOL драйвер 10.x
Я не вижу в этом коде проблем.
Но у меня не фискализирован ФН и как следствие не проходит запрос на параметры ФН:
Не согласен - ошибка явно указывает на некорректное состояние ФН.SergioRaguzini писал(а): ↑30 Сентябрь 2020, 22:38 Номер ФН отображается независимо от того фискализирован он или нет
За теми кто отстал - не возвращаться. (С) Кодекс
- SergioRaguzini
- Старожил
- Сообщения: 236
- Зарегистрирован: 08 Декабрь 2009, 19:16
- Откуда: Краснодарский край
- Благодарил (а): 6 раз
ATOL драйвер 10.x
Привет Всем!
У меня в АТОЛ-11Ф стоит МГМ-ФН и чтобы отбросить сомнения, если хотите, могу свой АТОЛ сбросить (расфискализировать) и взять вашу тестовую программку посмотреть - получим ли упомянутую выше ошибку.
Я, только что, у себя собрал тестовую программку для ДТО-8 и попробовал считать номер ФН и информация о нем считывается корректно, в ДТО-10 тоже, но только через "Тест драйвера", а прикладной из Clarion пока нет - пустота...
Дело не в том - фискализирован ли ФН или нет - информация о нем (номер ФН и т.д.) должна отображаться. Я, конечно, больше работал с "ШТРИХ"-ами, но, наверняка АТОЛ работает по такому же принципу.Игорь Столяров писал(а): ↑30 Сентябрь 2020, 22:41 ...не фискализирован ФН и как следствие не проходит запрос на параметры ФН...
У меня в АТОЛ-11Ф стоит МГМ-ФН и чтобы отбросить сомнения, если хотите, могу свой АТОЛ сбросить (расфискализировать) и взять вашу тестовую программку посмотреть - получим ли упомянутую выше ошибку.
Я, только что, у себя собрал тестовую программку для ДТО-8 и попробовал считать номер ФН и информация о нем считывается корректно, в ДТО-10 тоже, но только через "Тест драйвера", а прикладной из Clarion пока нет - пустота...
- Вложения
-
- для ДТО-8
- fn_8.jpg (9.78 КБ) 4091 просмотр
-
- fn_10.jpg (69.46 КБ) 4091 просмотр
Последний раз редактировалось SergioRaguzini 01 Октябрь 2020, 14:40, всего редактировалось 1 раз.