|
|
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
Добрый всем день! Вопрос наверное набил оскомину, и большинство может меня отправить в поиск по гуглу. Но есть нюанс. В приложении нужно получить оплату через сбербанк. В их длл-ке очень простой интерфейс, и все отлично, до тех пор пока не пытаюсь получить текст чека, который передается как lpChar и должен быть освобожден с помощью GlobalFree. В этот момент получаем Access Violation, но не как обычно по адресу близкому к 0, а по адресу который находится за пределами 3ГБ пользовательского пространства. Прога компилируется Delphi7, перевод на 64 бита пока невозможен. Может быть кто-то решал похожую проблему? И доступ к этому участку памяти все же возможен... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 11:14 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
Андрей Седоченко, Если delphi 7, то библиотека явно 32-х битная, иначе бы вы её загрузить не смогли. Я бы проверил описание импортируемых функций и соглашения о вызове, т.к. возможно что адрес за пределами 3Гб - это мусор, отсюда и AV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 11:30 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
когда использовал эту либу pilot_nt.sberbank не заметил проблем с получением текста чека ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 11:38 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
Андрей Седоченко который передается как lpChar Юникодный наверное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 12:13 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
Самое странное то. что у меня есть старая процедура, которая подгружает библиотеку, делает запрос и получает чек одним куском кода, и она работает. Но изменились требования к интерфейсу и теперь все разнесено по разным процедурам и по времени обращения. После этого стал получать AV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 12:18 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
a4sdg когда использовал эту либу pilot_nt.sberbank не заметил проблем с получением текста чека Я ее только вчера обнаружил, еще не пробовал. Все попытки были пока что, решить своими силами, но они безуспешны. Но подход из этой либы я еще попробую, т.е. на каждый вызов библиотечной функции делать новую загрузку библиотеки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 12:23 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
С такой проблемой мы не сталкивались. Вы поля структуры TAuthAnswerXXX обнуляете перед вызовом функции "_card_authorizeXXX", или у Вас там мусор? Версию "_card_authorize" какую используете? 14-ю? Текст чека получить можно таким образом: s := string(AuthXXX.ans.Check) Освободить память так: GlobalFree(DWORD(AuthXXX.ans.Check)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 13:02 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
DmSer, Все делаю именно так и в такой последовательности. версию _card_authorize использовал без номера и 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 13:26 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
Раз AV возникает, значит все-таки что-то Вы не так делаете. Функцию "_SetGUIHandles" используете? Насчёт того, чтобы библиотеку загружать каждый раз заново: мы так и сделали, поскольку в ней есть глюки, программисты Сбера исправить их не смогли (года два мы их просили об этом, то она у них иногда зависает, то СОМ-порты не закрывает), поэтому сделали отдельную программу "2", её запускает основная программа "1", программа "2" выполняет команду и закрывается. Если вдруг программа "2" зависает, то в программе "1" это детектируется и процесс программы "2" убивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 14:15 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
Попробуйте Это пароль: 2017 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 14:37 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
DmSer, Попробую, обязательно. Спасибо. Я говорил уже, что у меня есть процедура, которая работает без ошибок, просто я больше не могу ее использовать потому что надо разделить библиотечные вызовы по времени. Может быть все дело в том что я добавил обертку к библиотечной функции примерно вот таким способом Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. все рабочие примеры утилизируют текст чека сразу после вызова, а мне он нужен позже, после вызова этой обертки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 15:13 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
Андрей Седоченко все рабочие примеры утилизируют текст чека сразу после вызова, а мне он нужен позже, после вызова этой обертки. Копируй после вызова во внутренние дельфийские типы и утилизируй исходное значение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 15:58 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
Всем огромное спасибо за помощь. Предположение о мусоре было самым верным!! Я бы еще дольше про...мучился если бы не понял что структуры должны быть packed. Сколько не сравнивал код из разных источников просто не видел этого очевидного факта. А все остальное ерунда. Можно хоть откуда вызывать, передавать и освобождать когда угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2019, 20:27 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
DmSer, Подскажите пожалуйста есть рабочий пример получения хэш карты клиента и айди терминала? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 07:13 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
Вроде нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 07:43 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
DmSer, Напишите в личку или на почту ehl98@mail.ru. Есть предложение для Вас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 08:29 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
DmSer Вроде нет. Таки есть: Хэш возвращается при обычном списании после вызова функции CardAuthorizeХХХ Код: pascal 1. 2. 3. 4. Если нужно избежать оплаты, то в настройках TLV нужно задать параметр "Возвращать промежуточный код ответа", далее нужно ловить код 4353, в этом случае оплаты ещё нет, но информация по карте (включая хэш) уже есть. Также при вызове функции '_ReadCardSB' (может не работать для NFC-оплаты) Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 13:05 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
ehl DmSer, Напишите в личку или на почту ehl98@mail.ru. Есть предложение для Вас. Моя почта есть внизу на сайте из моего профиля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2020, 13:06 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
DmSer, спасибо большое работает!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2020, 09:51 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
DmSer, А как узнать принадлежит ли карта сбербанка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2020, 03:57 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
ehl DmSer, А как узнать принадлежит ли карта сбербанка? Исходя из этого: https://www.banki.ru/wikibank/bankovskiy_identifikatsionnyiy_nomer/ Bank Identification Number (BIN), банковский идентификационный номер (БИН) - часть номера, расположенного на пластиковой карте. Используется для идентификации банка в рамках карточной платежной системы при авторизации, процессинге и клиринге. БИН определяет платежную систему и тип карты в рамках этой платежной системе. Например, карты VISA всегда начинаются с цифры 4. Формат номера регулируется ИСО/МЭК 7812-1 (выдает SWIFT). Но внутреннее деление внутри БИН является закрытой информацией платежной системы и доступно только ее участникам. ответ: никак. Но вот тут пишут что есть онлайн-сервисы, которые могут это делать, насколько им можно доверять - вопрос открытый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2020, 11:44 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
ehl DmSer, А как узнать принадлежит ли карта сбербанка? Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2020, 12:49 |
|
||
|
Access Violation при получении строки из pilot_nt.dll
|
|||
|---|---|---|---|
|
#18+
DmSer, спасибо то что нужно! id терминала можно получить без оплаты? как Вы показали пример с получением хэш так же id можно получить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2020, 12:07 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=51&tid=2038591]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 336ms |

| 0 / 0 |
