Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/76: Рейтинг темы: голосов - 76, средняя оценка - 4.67
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841

Считыватель смарт карт ACR122

10.04.2014, 18:52. Показов 15690. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. Кто имел дело с подобными считывателями, на диске с проектом есть Delphi проекты, работу которых я так и не смог понять, мне нужно при подносе карты к считывателю получать её 16-ти битный ключ. Кто в курсе как это можно сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.04.2014, 18:52
Ответы с готовыми решениями:

Считыватель контактных смарт-карт на форму в HTML
Нужно внедрить систему считывания смарт карт (удос. личн.) на страницу в HTML Будьте добры, подкиньте несколько вариантов на чем это...

Ищу книги Патрик Гелль секреты программирования смарт карт Мытник Пасечник смарт карты и информационная безопасность
уже весь интернет обыскался не могу найти книги в электронном виде

Считыватель ACR122U не реагирует на смарт карту
Считыватель ACR122U не реагирует на смарт карту... Как определить интерфейс смарт карты? Схожа с той, что на картинке... Видит Mifire, ISO...

62
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
23.04.2014, 19:37  [ТС]
Кто может помочь перевести эти два Delphi проекта в С++ Builder? Один из них умеет по таймеру определять что карта подведена к считывателю, а второй умеет выдёргивать 16-битный ключик уникальный. Просто максимум на что меня хватило это скомпилить проект и проверить, при попытке перевода на с++ builder работать отказалось (в силу моего незнания Delphi).
Вложения
Тип файла: rar Other PICC Programming.rar (45.6 Кб, 73 просмотров)
Тип файла: rar Polling.rar (47.1 Кб, 66 просмотров)
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
23.04.2014, 19:52
DrSMERTb В двух проектах присутствует один и тот же модуль - ACSModule.pas. Его просто подключаешь в проект. При компиляции появится файл ACSModule.hpp, его подключаешь через #include.
Остаются только Polling.pas и OtherPICC.pas.
Их не трудно перевести. Я бы сначала в билдеровский проект скопировал .dfm файл, отвечающий за интерфейс формы. Потом перевёл бы обработчики событий, а потом всё остальное. При переводе, если что-то непонятно, то вбить в гугл и прочитать.
1
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
23.04.2014, 20:54  [ТС]
Цитата Сообщение от kzru_hunter Посмотреть сообщение
В двух проектах присутствует один и тот же модуль - ACSModule.pas. Его просто подключаешь в проект. При компиляции появится файл ACSModule.hpp, его подключаешь через #include.
, сразу после подключения при попытке компиляции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
[bcc32 Error] ACSModule.hpp(122): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(123): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(124): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(125): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(126): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(127): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(128): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(129): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(130): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(131): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(132): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(133): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(134): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(135): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(136): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(137): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(138): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(139): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(140): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(141): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(142): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(143): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(144): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(145): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(146): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(147): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(148): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(149): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(150): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(151): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(152): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(153): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(154): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(155): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
[bcc32 Error] ACSModule.hpp(156): E2293 ) expected
  Full parser context
    Unit1.cpp(6): #include ACSModule.hpp
    ACSModule.hpp(26): namespace Acsmodule
сразу после попытки подключения он в этом hpp файле нашёл 36 ошибок.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
23.04.2014, 21:28
Закомментируй строки, на которых ошибка вылазит.
1
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
24.04.2014, 16:43  [ТС]
kzru_hunter, а с чего проще пересести будет с Delphi или с Visual c++ на с++ builder?
0
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
24.04.2014, 17:02  [ТС]
Вот ещё DLL нашёл на сайте разработчика: как можно узнать список функций этой dll?
Вложения
Тип файла: rar x64.rar (29.9 Кб, 32 просмотров)
0
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
25.04.2014, 07:33  [ТС]
Чот посмотрел демки которые с этой dll лежали ни один не работает... Решил на Builder проверить переконвертил либу через coff2omf.exe, результат и при вызове из своей программы тот же... Может кто с переводом из Delphi в с++ Builder всё таки поможет эти сэмплы хотяб работают)

Добавлено через 12 часов 20 минут
kzru_hunter, говорили поможете) как вот эту строку переделать?
C++
1
tempstr = tempstr + Format("%.02X ",SendBuff[index]);
Добавлено через 10 минут
И вот этот момент в плане сто значит @ перед переменными?
C++
1
2
3
4
5
6
7
retCode = SCardTransmit(hCard,
                           @ioRequest,
                           @SendBuff,
                           SendLen,
                           Nil,
                           @RecvBuff,
                           @RecvLen);
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
25.04.2014, 10:08
Цитата Сообщение от DrSMERTb Посмотреть сообщение
И вот этот момент в плане сто значит @ перед переменными?
Знак @ перед переменной указывает адресс переменной в памяти. Если не ошибаюсь то в С++ Это &.

Вот нашел на просторах интернета. Но там нет адресса ссылка
1
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
25.04.2014, 10:31
Цитата Сообщение от Xank Посмотреть сообщение
Но там нет адресса ссылка
Почему нет? LP в типе означает long pointer, это указатель
1
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
25.04.2014, 12:24  [ТС]
а всё таки что делает вот эта строка?
Delphi
1
tempstr = tempstr + Format("%.02X ",SendBuff[index]);
и как можно её интерпретировать в с++ builder?
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
25.04.2014, 14:32
SendBuff какой тип?
Скорее всего подойдёт что-то наподобие IntToHex()
1
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
25.04.2014, 14:34
Цитата Сообщение от DrSMERTb Посмотреть сообщение
а всё таки что делает вот эта строка?
Код Delphi
1
tempstr = tempstr + Format("%.02X ",SendBuff[index]);
Форматирует вывод строки из int если не ошибаюсь, в Шестнадцатеричный т.е. Format(' %x', [140]) выдаст 8C.


упс можно удалить. не видел ответ.
1
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
25.04.2014, 14:36  [ТС]
Объявляю:
C++
1
SCARD_IO_REQUEST *ioRequest
При вызове
C++
1
2
3
4
5
6
7
retCode = SCardTransmit(hCard,
                           *ioRequest,
                           SendBuff,
                           SendLen,
                           Null,
                           &RecvBuff,
                           &RecvLen);
Функции
C++
1
int __stdcall SCardTransmit(unsigned hCard, LPCSCARD_IO_REQUEST pioSendPci, System::PByte pbSendBuffer, unsigned cbSendLength, LPCSCARD_IO_REQUEST pioRecvPci, System::PByte pbRecvBuffer, LPDWORD pcbRecvLength);
ругается
C++
1
2
3
[bcc32 Error] Unit1.cpp(84): E2034 Cannot convert 'SCARD_IO_REQUEST' to 'SCARD_IO_REQUEST *'
  Full parser context
    Unit1.cpp(64): parsing: void _fastcall TForm1::SendAPDU(int)
, как тут быть?
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
25.04.2014, 14:42
Цитата Сообщение от DrSMERTb Посмотреть сообщение
retCode = SCardTransmit(hCard, *ioRequest,
Там тоже указатель
C++
1
2
3
SCARD_IO_REQUEST ioRequest;
retCode = SCardTransmit(hCard,
                           &ioRequest,
1
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
25.04.2014, 14:43  [ТС]
mimicria, тогда пишет:
C++
1
2
3
[bcc32 Error] Unit1.cpp(84): E2034 Cannot convert 'Variant()' to 'SCARD_IO_REQUEST *'
  Full parser context
    Unit1.cpp(64): parsing: void _fastcall TForm1::SendAPDU(int)
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
25.04.2014, 14:48
Цитата Сообщение от DrSMERTb Посмотреть сообщение
Cannot convert 'Variant()' to 'SCARD_IO_REQUEST *'
Где-то значит неверное преобразование делаете. Без исходника сложно гадать
1
 Аватар для DrSMERTb
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
25.04.2014, 14:49  [ТС]
mimicria,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "ACSModule.hpp"
 
 
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "sButton"
#pragma resource "*.dfm"
TForm1 *Form1;
 
  SCARDCONTEXT hContext;
  SCARDCONTEXT hCard;
  SCARD_IO_REQUEST ioRequest;
  int retCode;
  int dwActProtocol, BufferLen;
  Byte  SendBuff[262], RecvBuff[262];
  int SendLen, RecvLen, nBytesRet;
  char Buffer;
  bool validATS;
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
 {
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::DisplayOut(String output,int mode)
{
 
  if (mode==1) rbOutput->SelAttributes->Color = clBlue;
  if (mode==2) rbOutput->SelAttributes->Color = clRed;
  if (mode==3)
        {
        rbOutput->SelAttributes->Color = clBlack;
        output = "<< " + output;
        }
  if (mode==4)
        {
        rbOutput->SelAttributes->Color = clBlack;
        output = ">> " + output;
        }
 
 
  rbOutput->Lines->Add(output);
  rbOutput->SelAttributes->Color = clBlack;
  rbOutput->SetFocus();
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClearBuffers()
{
 
  for (int index=0;index<252;index++)
    {
      SendBuff[index] = 0x00;
      RecvBuff[index] = 0x00;
    }
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SendAPDU(int mode)
{
int index;
String tempstr;
  ioRequest.dwProtocol = dwActProtocol;
  ioRequest.cbPciLength = sizeof(SCARD_IO_REQUEST);
 
  tempstr = "";
  for (index = 0; index<SendLen - 1; index++)
    {
    String f="%.02X ";
    tempstr = tempstr + SendBuff[index];
    }
  DisplayOut(tempstr,3);
 
  retCode = SCardTransmit(hCard,
                           &ioRequest,
                           SendBuff,
                           SendLen,
                           Null,
                           RecvBuff,
                           &RecvLen);
  if (retCode != SCARD_S_SUCCESS) {
    DisplayOut(GetScardErrMsg(retCode),2);
    SendAPDU(retCode);
 
  }
 
  tempstr = "";......
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
25.04.2014, 15:05
C++
1
2
3
int retCode;
// попробуй заменить
long retCode;
1
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
25.04.2014, 15:05
C++
1
2
  for (index = 0; index<SendLen - 1; index++)
     tempstr = tempstr + IntToHex(SendBuff[index],2);
Навскидку массивы SendBuff[262], RecvBuff[262] размер не совпадает с очищением for (int index=0;index<252;index++)

А ошибка может быть связана с кривыми типами, например:
первый параметр hCard должен быть типа SCARDHANDLE согласно описания
Получается он после вызова вот этого.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.04.2014, 15:05
Помогаю со студенческими работами здесь

Считыватель магнитных карт для УТ 10.3
Добрый день. Конфигурация Управление торговлей 10.3. Подскажите пожалуйста, какой считыватель магнитных карт купить для подключения к...

Считыватель карт добавляет лишний символ
Добрый день. Возможно кто то встречался с подобной проблемой: Считыватель карт на POS терминале OTEK M667 добавляет следующий символ перед...

Arduino Nano v3 и заводской считыватель карт (Mifare, HID и тд)
Доброго времени суток ребята, Хочу спросить кто нибудь пробовал подключать заводской считыватель карт к Ардуино вместо готовых модулей...

Считыватель Matrix-II для бесконтактных карт PROXIMITY + AVR
Добрый день. Подскажите как получить считанную инфу на мегу16. На считыватели 3 клемы +12 GND DATA0.

Используя Arduino контролер и магнитный сканер, собрать считыватель карт
Задача: Используя Arduino контролер и магнитный сканер, собрать считыватель карт, и написать для него программу с БД хранящей информацию о...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru