Спасибо , попробуем побороть, либо попробуем на дельфях )
Спасибо , попробуем побороть, либо попробуем на дельфях )
Все таки что то с приходящей структурой , у нас в скудной документации вот такая структура указана:
Структура, на которую указывает Info:
Word размер структуры = 1164 байт (это поле заполнено при вызове)
Byte Карта существовала, но была удалена
0 - нет, и сейчас есть
1 - да, удалена
Byte Карту надо изъять
0 - нет
1 - да
Byte Истек срок действия
0 - нет
1 - да
Byte Сейчас карта не действует
0 - нет, действует
1 - да, не действует
Byte Нужно ли подтверждение менеджера
0 - не нужно
1 - нужно
Byte Карта заблокирована
0 - нет
1 - да
256 байт Asciiz строка - причина блокировки карты - будет показана на кассе
40 байт Asciiz строка - имя владельца карты
Int64 Идентификатор владельца карты
DWORD Номер счета
DWORD тип неплательщика
Word номер бонуса
Word номер скидки
Int64 предельная сумма скидки, в копейках
Int64 сумма, доступная для оплаты счета, в копейках
Int64 сумма на карточном счете N 2, в копейках
Int64 сумма на карточном счете N 3, в копейках
Int64 сумма на карточном счете N 4, в копейках
Int64 сумма на карточном счете N 5, в копейках
Int64 сумма на карточном счете N 6, в копейках
Int64 сумма на карточном счете N 7, в копейках
Int64 сумма на карточном счете N 8, в копейках
256 байт Asciiz - произвольная информация о карте
256 байт Asciiz - информация для вывода на экран кассы
256 байт Asciiz - информация для распечатки на принтере
Версия RKeeper 6.109
Версия Farcards 6.04
Возможно ли , что эти версии не совместимы по протоколу передачи данных?
Все так. Все совместимо.
Покажите что ли как у вас структура описана в коде...
Ильин Александр, Компания "Соттос"
г Новосибирск +7 (383) 373-96-98; +7 (909) 533-93-92; nsk@sottos.ru
г Омск +7 (3812) 377-902; +7 (905) 098-92-06; abc@sottos.ru
www.sottos.ru | vk.com/sottos | fb.com/sottosru
Продажа и установка ПО R-Keeper, обучение, техническая поддержка 24/7
вот наша структура
Код:struct Info { //размер структуры = 1164 байт(это поле заполнено при вызове) WORD size; //Удалена или нет BYTE deleted; //0 - нет, и сейчас есть //1 - да, удалена //Карту надо изъять BYTE nedd_withdraw; //0 - нет //1 - да //Истек срок действия BYTE expired; //0 - нет //1 - да //Сейчас карта не действует BYTE not_valid; //0 - нет, действует //1 - да, не действует //Нужно ли подтверждение менеджера BYTE manager_confirm; //0 - не нужно //1 - нужно //Карта заблокирована BYTE blocked; //0 - нет //1 - да //256 байт Asciiz строка - причина блокировки карты - будет показана на кассе char block_reason[256]; //40 байт Asciiz строка - имя владельца карты char card_owner[40]; //Идентификатор владельца карты INT64 owner_id; //Номер счета DWORD account_number; //тип неплательщика DWORD not_pay_type; //номер бонуса WORD bounus_num; //номер скидки WORD discount_num; //предельная сумма скидки, в копейках INT64 max_discount; //сумма, доступная для оплаты счета, в копейках INT64 access_amount; //сумма на карточном счете N 2, в копейках INT64 acces_amount2; //сумма на карточном счете N 3, в копейках INT64 access_amount3; //сумма на карточном счете N 4, в копейках INT64 access_amount4; //сумма на карточном счете N 5, в копейках INT64 access_amount5; //сумма на карточном счете N 6, в копейках INT64 access_amount6; //сумма на карточном счете N 7, в копейках INT64 access_amount7; //сумма на карточном счете N 8, в копейках INT64 access_amount8; //256 байт Asciiz - произвольная информация о карте char comment[256]; //256 байт Asciiz - информация для вывода на экран кассы char screen_comment[256]; //256 байт Asciiz - информация для распечатки на принтере char printer_comment[256]; };
Вот размер структуры (в байтах) посчитанный для Дельфей. По итогу складываются нужные 1164 байта.Код:WORD size; 2 BYTE deleted; 1 BYTE nedd_withdraw; 1 BYTE expired; 1 BYTE not_valid; 1 BYTE manager_confirm; 1 BYTE blocked; 1 char block_reason[256]; 256 char card_owner[40]; 40 INT64 owner_id; 8 DWORD account_number; 4 DWORD not_pay_type; 4 WORD bounus_num; 2 WORD discount_num; 2 INT64 max_discount; 8 INT64 access_amount; 8 INT64 acces_amount2; 8 INT64 access_amount3; 8 INT64 access_amount4; 8 INT64 access_amount5; 8 INT64 access_amount6; 8 INT64 access_amount7; 8 INT64 access_amount8; 8 char comment[256]; 256 char screen_comment[256]; 256 char printer_comment[256]; 256 ИТОГО Байт 1164
SizeOf(Info) - у вас сколько покажет? Если не 1164, то тогда проверяйте каждый используемый тип (его длину) через SizeOf().
Си под рукой нету, поэтому сказать точно какой тип данных у вас не того размера не могу. Да еще и от компилятора зависит...
Ильин Александр, Компания "Соттос"
г Новосибирск +7 (383) 373-96-98; +7 (909) 533-93-92; nsk@sottos.ru
г Омск +7 (3812) 377-902; +7 (905) 098-92-06; abc@sottos.ru
www.sottos.ru | vk.com/sottos | fb.com/sottosru
Продажа и установка ПО R-Keeper, обучение, техническая поддержка 24/7
В памяти структура выравнивается соответственно ваша структура 1168 используйте паковку.
SH (02.07.2017)
ExtDll.7z
Реализация в c++ builder
SH (02.07.2017),sibgaba (02.07.2017),Денис Афанасьев (11.07.2017)
Всем спасибо, да там была трабла со структурой походу и ошибка в одном из типов в методе, не тот тип аргумента ), мы это поправили, но родилась еще проблемка. Строковые переменные все норм приходят, а int-ы только старший байт что ли (тоесть приходит максимальная цифра инта ), хотя мы заполняем вменяемыми суммами.
---------- Добавлено в 14:22 ---------- Предыдущее сообщение было размещено в 12:24 ----------
Теперь работаем с методом TransactionEx И начали понимать в каком типе у нас пролемы идут - Это тип DWORD , в дельфи видимо он другой по размеру , пытаемся его побороть. Каким типом его интерпритировать в C++ его ?
Ну в дельфи DWORD это 4 байта.
Что под это подойдет в Си - вам виднее. Вы же на Си пишите...
Хотя вон в примере Slion - тоже DWORD используется и вроде как ничего...
Ильин Александр, Компания "Соттос"
г Новосибирск +7 (383) 373-96-98; +7 (909) 533-93-92; nsk@sottos.ru
г Омск +7 (3812) 377-902; +7 (905) 098-92-06; abc@sottos.ru
www.sottos.ru | vk.com/sottos | fb.com/sottosru
Продажа и установка ПО R-Keeper, обучение, техническая поддержка 24/7
Специально зарегистрировался чтобы отблагодарить.
СПАСИБО SLion за ExtDll!!!
И Ильину Александру за намек с размером структуры!
И Всем Форумчанам за внимание к данному вопросу!