|
2 / 2 / 2
Регистрация: 23.06.2014
Сообщений: 12
|
||||||||||||||||
1C/Delphi/VB/C Драйвер ФЕЛИКС-РМК23.06.2014, 10:44. Показов 4580. Ответов 6
Метки нет (Все метки)
Проблема: имеется фискальный регистратор Феликс-РМК, нужно прикрутить его к программе на Delphi, и не получается. Общий драйвер ККМ от Атола не подходит, Атол разводит руками, мол, именно к этому Феликсу мы не имеем никакого отношения, драйвер для 1С писал сам изготовитель, завод "Счетмаш".
В комплекте с Феликсом идет драйвер: набор .dll и .epf. Внешний модуль, который непосредственно использует 1С, называется Smdd_ExCom.dll. Вроде бы он в себе содержит элемент ActiveX, судя по наличию экспортируемых функций DllRegisterServer и DllGetClassObject, но не тут-то было, Delphi (версии 7 и версии XE5) не видит никаких новых ActiveX в системе после регистрации этой библиотеки с помощью regsvr32, да и при помощи OleViewer от MS тоже не нахожу. Вот что я извлек из модуля .ert, прилагаемого, правда, не к этой модели, но к видимо совместимой Феликс-80к (во всяком случае, набор .dll совпадает):
Фрагмент аналогичного по назначению кода, написанного мной, выглядит вот так:
Вот здесь я себе всю голову сломал. Вроде COM-объект один и тот же, и создается исправно, почему же из 1С получается обратиться к его методам, а из Delphi и VB нет? Загадка. Наверно, что-то я неправильно делаю. Подскажите, господа, хотя бы куда копать. В Сети ничегошеньки полезного не нашел. Может, у кого-то есть пример вызова таких методов на любом языке - если не Delphi и не VB, то C++, или C#, или CBuilder - вообще любом языке, позволяющем создавать .dll (1С такого вроде не позволяет). Я бы ее сгенерировал и прикрутил к своему проекту. Спасибо. Ссылки: http://www.schetmash.com/feliks-rmk.html P.S. Сейчас получил ответ от фирмы "Счетмаш". Советуют не связываться с Smdd_Ex_Com.dll, а заняться непосредственно smdd.dll. Попробую, вот только из smdd.dll никакой COM-объект не создается, очень жаль.
0
|
||||||||||||||||
| 23.06.2014, 10:44 | |
|
Ответы с готовыми решениями:
6
Delphi и ФЕЛИКС РМК Драйвер для delphi Возможно ли написать драйвер на Delphi? |
|
2 / 2 / 2
Регистрация: 23.06.2014
Сообщений: 12
|
||||||||||||||||
| 25.06.2014, 00:27 [ТС] | ||||||||||||||||
|
Ну как сказать - торчат? Имеются, правда, имена малость перекорежены, типа SMDDBell() и т.п. Драйвер (если вообще забыть про 1с) состоит из ядра smdd.dll и подключаемых библиотек smdd_rmk.dll и других. Имя библиотеки передается как аргумент в функции ядра. Сами функции и параметры описаны в имеющемся у меня заголовочном файле smdd.h - типы данных, конечно, из C/C++. Это ладно, для всех типов С можно подобрать аналоги в Delphi. Кое-что работает: гружу smdd.dll в память, нахожу нужную функцию, вызываю. Например, можно вызвать диалог настройки ККМ, это работает. А вот вызов простейшей функция BELL (у нее даже аргументов нет!) приводит к вылету программы!
Хотелось бы, конечно, вызывать функции драйвера 1с, они задокументированы и более-менее одинаковые вообще для любой модели ККМ. Почему это не получается - смертельно удивительно. Добавлено через 31 минуту Вот как я это делаю. Фрагмент заголовочного файла smdd.h: int __stdcall (*SMDDDeviceConfigureUI)(void); int __stdcall (*SMDDBell)(void); int __stdcall (*SMDDBeep)(int frequency, int duration); - как видно, это три разных функции, возвращаюшие результат целого типа (0, если функция отработала без ошибок, или же код ошибки). Соответственно в своей программе на Delphi в разделе var я определяю три переменные типа функция:
int __stdcall (*SMDDDeviceConfigure)(char *libname, int id, char *commpwd, char *portname, unsigned long baudrate); И вот так я ее вызываю:
0
|
||||||||||||||||
|
2 / 2 / 2
Регистрация: 23.06.2014
Сообщений: 12
|
|
| 25.06.2014, 03:13 [ТС] | |
|
В Delphi есть тип variant. Но он никак не годится для вызова функций, написанных на C/C++ и хранящихся в .dll, если они ожидают переменные типа char* или int или unsigned int - ведь при вызове процедуры они размещаются в стеке, каждая со своим размеров в байтах.
Вот здесь - официальные драйвера от "Счетмаша" - http://www.schetmash.com/feliks-rmk.html Есть еще исходный текст (на языке C) драйвера smdd.dll, готов скинуть в личку, только не соображу как... Пока высылаю заголовочный файл smdd.h - там перечислены все функции, имеющиеся в smdd.dll, этого достаточно для написания программ, использующих эти функции, а также описание функций на русском языке. Боюсь, правда, что в отсутствие живьем Феликс-РМК программы написать можно, а вот отладить их - никак.
0
|
|
|
2 / 2 / 2
Регистрация: 23.06.2014
Сообщений: 12
|
|
| 25.06.2014, 14:45 [ТС] | |
|
Всё, я разобрался с этой библиотекой.
Заработала она в режимах и раннего, и позднего связывания. Оказалось, строковые аргументы из Delphi нужно передавать не как PChar (Delphi XE5, похоже, автоматически преобразует их к типу PWideChar), а как PAnsiChar. Кроме того, драйвер недостаточно просто инициализировать: после настройки следует еще подать ему команду Start. И некоторые функции, например, Beep, просто не поддерживаются Феликс РМК.
2
|
|
| 25.06.2014, 16:02 | |
|
Не по теме: Я даже скачать не успел =))
0
|
|
| 25.06.2014, 16:02 | |
|
Помогаю со студенческими работами здесь
7
РМК розница 2,0 Атол Фронтол И РМК Нулевой остаток в РМК Настройка РМК (розница 2.1)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|