Есть примерно 10 USB устройств подключенных через USB-хаб. Для работы с устройствами есть библиотека производителя.
Импортирую библиотеку и пару методов с неё:
private const string ClscrflDll = "Clscrfl.dll";
[DllImport(ClscrflDll)]
public static extern uint CLSCRF_Create(ref IntPtr handle);
[DllImport(ClscrflDll)]
public static extern uint CLSCRF_OpenUSB(IntPtr pReader, uint dwIndex, uint dwLogFile);
Вызываю эти методы:
IntPtr pReader = new IntPtr();
CLSCRF_Create(ref pReader);
CLSCRF_OpenUSB(pReader, 8, 0);
Где второй параметр "8", у OpenUSB, это номер устройства. Проблема в том что к устройствам от 0 до 7 я подключаюсь без проблем, начиная с 8го, программа просто закрывается, не выдавая никаких ошибок/исключений и т.д.
Есть коллега, который на Delphi написал точно такой же код с этой же библиотекой, у него всё работает.
Пробовал ставить разные соглашения о вызове, не помогло. В чём ещё может быть проблема, может я что-то упустил?
В документации к библиотеке:
LONG CLSCRF_Create( IN OUT LPVOID* ppReader );
Создает объект-интерфейс. Эта функция должна вызываться 1 раз в начале работы приложения.
ppReader – адрес переменной, в которую будет помещена ссылка на созданный
объект-интерфейс и которая будет использоваться в вызовах
всех остальных функций.`LONG CLSCRF_OpenUSB( IN LPVOID pReader,IN DWORD dwIndex = 0,IN DWORD dwLogFile= 0 );
Открывает USB-интерфейс. Эта функция должна вызываться 1 раз перед началом обмена со считывателем.
pReader – ссылка на объект-интерфейс (см. функцию CLSCRF_Create);dwIndex – номер USB-устройства в дереве устройств от 0;dwLogFile – вывод в файл хронологии обмена:
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости