Предисловие.
Несложно заметить, что на просторах интернета достаточно много разработок для генерирования штрих-кодов разного типа. Многие используются в качестве онлайн сервисов, другие - как отдельные приложения и, наконец - как внешние компоненты, в том числе и для 1С. Однако, последние, хоть и генерируются в 1С, распознаны ею уже не могут быть. Поиски решения как распознать штрих-код заняли много времени, и были безуспешны - поэтому было решено создать ActiveX для распознавания штрих-кодов.
Технология.Камера
Работа с камерой осуществляется с помощью библиотеки avicap32.dll. Благодаря ей же, реализован метод ПолучитьИмяУстройства(Индекс) возвращающий имя драйвера, который можно использовать для построения списка устройств ввода видео данных.
Технология.РаспознованиеШтрихКода
Изобретать велосипед незачем ,так как уже есть проверенные библиотеки распознавания:
ZXing-2.1*
MessagingToolkit Barcode*
*Библиотеки бесплатны для некоммерческого использования.
Выбор пал на последнюю, ввиду большей скорости обработки информации, однако замечу, что после множества тестов распознавания сложных штрих-кодов (таких как PDF 317 и CODE 128) процент ошибок ZXing был сравнительно ниже.
ВнешняяКомпонента.Использование
К сожалению, на момент написания статьи не удалось решить проблему использования одной библиотеки для обоих клиентов, поэтому чтобы использовать компонент в толстом клиенте используется Shakmaev.Decoder.dll, для тонкого Shakmaev.TDecoder.dll.
Для начала работы с компонентой убедитесь что на компьютере установлен Microsoft Framework 4.
Затем ее необходимо зарегистрировать выполнив команду:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe ".\Shakmaev.Decoder.dll" /codebase
и скопировать файл avicap32.dll(сохраните старый файл, если он уже есть) в папку \Windows\System32.
Для облегчения работы в папке с ВК вы найдете BAT файл(Registry.bat), который поможет сделать все это автоматически.
[Толстый клиент]
Библиотека для работы с обычными формами Shakmaev.Decoder.dll [GUID: 779D9FB8-C4A3-40c2-9E08-296CDAF1165F]
Если вся работа была проделана правильно, в списке окна Форма-Вставить ActiveX должна появиться строка Shakmaev.Decoder. Перед началом работы необходимо указать коды каких типов вы будете пытаться распознать. Для этого существуют параметры вида ИскатьХ, где Х - это любой из этого списка поддерживаемых типов штрих-кодов (например ИскатьQR):
UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 128, QR Code, Interleaved 2 of 5, Codabar, RSS-14, Data Matrix, PDF 417, Aztec, MaxiCode.
Для удобства в ВК есть параметр "ИспользоватьСигнал", если присвоить ему значение "Истина", то при выполнении функции "РаспознатьКод()" системный динамик должен издать звук. К сожалению, это работает только в операционных системах архитектуры x86.
Подробности в обработке "Decoder" архива проекта, форма "ОбычнаяФорма".
[Тонкий клиент, Веб-клиент]
Библиотека для работы с управляемыми формами Shakmaev.TDecoder.dll [GUID: AE078288-5E41-4316-95FF-33AFE7753168]
Чтобы добиться корректной работы ActiveX в управляемом приложении необходимо в настройках обозревателя разрешить выполнение ActiveX сценариев и все что с ними связано. Функции и параметры доступные в обычном приложении тут работают аналогично.
Подробности в обработке "Decoder" архива проекта, форма "УправляемаяФорма".
[UPD 27.08.2013]
Любые действия, связанные с регистрацией компоненты, вы должны выполнять с правами администратора.
//Ошибка RegAsm : error RA0000: При записи регистрационной информации в реестр произошла ошибка.//
Cкорее всего, у вас нет прав доступа к ветке реестра HKEY_CLASSES_ROOT.
Алгоритм дейтвий такой:
1. Нажимаем Пуск - Выполнить
2. Пишем regedit и жмем Enter
3. Кликаем правой кнопкой мыши по ветке HKEY_CLASSES_ROOT и выбираем "Разрешения"
4. Выберите группу Администраторы
5. Убедитесь, пункт "Полный доступ" отмечен, в противном случае отметьте его.
6. Нажмите "Применить", и "ОК"
7. Установка должна пройти успешно. При необходимости перезагрузитесь.
//Ошибка RegAsm : error RA0000: Unable to locate input assembly. 'Путь в ковычках'//
Ошибка связана с тем, что программа регистрации не может найти файл библиотеки. Библиотека компоненты должна находиться в той же папке, что и bat файл.