Спасибо , попробуем побороть, либо попробуем на дельфях )
Вид для печати
Спасибо , попробуем побороть, либо попробуем на дельфях )
Все таки что то с приходящей структурой , у нас в скудной документации вот такая структура указана:
Структура, на которую указывает 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
Возможно ли , что эти версии не совместимы по протоколу передачи данных?
Все так. Все совместимо.
Покажите что ли как у вас структура описана в коде...
вот наша структура
Код: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().
Си под рукой нету, поэтому сказать точно какой тип данных у вас не того размера не могу. Да еще и от компилятора зависит...
В памяти структура выравнивается соответственно ваша структура 1168 используйте паковку.
Вложение 5978
Реализация в c++ builder
Всем спасибо, да там была трабла со структурой походу и ошибка в одном из типов в методе, не тот тип аргумента ), мы это поправили, но родилась еще проблемка. Строковые переменные все норм приходят, а int-ы только старший байт что ли (тоесть приходит максимальная цифра инта ), хотя мы заполняем вменяемыми суммами.
---------- Добавлено в 14:22 ---------- Предыдущее сообщение было размещено в 12:24 ----------
Теперь работаем с методом TransactionEx И начали понимать в каком типе у нас пролемы идут - Это тип DWORD , в дельфи видимо он другой по размеру , пытаемся его побороть. Каким типом его интерпритировать в C++ его ?
Ну в дельфи DWORD это 4 байта.
Что под это подойдет в Си - вам виднее. Вы же на Си пишите...
Хотя вон в примере Slion - тоже DWORD используется и вроде как ничего...
Специально зарегистрировался чтобы отблагодарить.
СПАСИБО SLion за ExtDll!!!
И Ильину Александру за намек с размером структуры!
И Всем Форумчанам за внимание к данному вопросу!
:drinks: