Я работаю над программой на C #, которая обменивается данными с частью аппаратного обеспечения через последовательный порт (упомянутое соединение через последовательный порт обрабатывается библиотекой C ++). Он предназначен для замены более раннего программного обеспечения, которое стало непригодным для использования. В настоящее время это не работает так, как я хочу. На моем рабочем ноутбуке, используя старую программу, отлично работает. Использование новой программы со старой DLL работает нормально. Использование новой программы с DLL-библиотекой, скомпилированной в режиме отладки, завершается неудачно (ранее мне удавалось скомпилировать DLL-библиотеку в режиме выпуска и заставить ее работать, но с тех пор в проекте были изменены параметры, которые приводили к сбою даже в режиме выпуска) , В частности, я отследил его с помощью монитора последовательного порта, и это происходит, когда я отправляю SOM (начало сообщения). Я отправляю сообщение «IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_IMMEDIATE_CHAR: Передача немедленного символа), ВНИЗ, ИСТИНА, 0x0,3A,:», и это похоже на успех. Затем я делаю «IRP_MJ_READ, ВНИЗ, ЛОЖЬ, 0x0 ,,», на который отвечает «IRP_MJ_READ, UP, FALSE, 0x102 ,,», ошибка. Эта точно такая же последовательность событий проходит при работе с неотладочной DLL.
Мне не удалось найти ссылку на 0x102 в качестве кода возврата, и не у всех возникает такая же проблема. Мой соотечественник по другую сторону Тихого океана иногда видит эту ошибку, но только при работе через виртуальную машину (он работает на Windows 7, но недавно нам пришлось разрабатывать для XP, работающей на виртуальной машине.
У кого-нибудь есть идеи, что может быть здесь?
Обновление
Ну, судя по всему, переход на .Net, по словам моего босса, запрещен. Наследственные причины. У меня есть тайм-ауты до 10 секунд, и он все еще истекает с DLL, скомпилированной в режиме отладки. Я обнаружил, что при работе в режиме выпуска программного обеспечения создается впечатление, что вызов маршрутизируется через rpcld.exe, который связан с противоугонной системой Absolute Software LoJack. При компиляции в режиме отладки такой вызов не выполняется. Заставляет меня задуматься, не блокируются ли последовательные порты, если только один из них не проходит через них. Я оставил сообщение одному из их представителей по обслуживанию клиентов на всякий случай. Это может объяснить, почему он работал на компьютере моего коллеги, пока он не перешел на виртуальную машину.