Работа с терминалами учета рабочего времени Anviz | |
---|---|
Victoriacom Автор Сообщений: 111 Дата регистрации: 08.12.2010 |
Здравствуйте, форумчане!
Не так давно общался с Вами по теме преобразования кода из C# в VFP9. Мне тогда здорово помогли! Тогда я даже научился работать в отладчике Visual Studio 2017. Тогда дело оказалось в типах данных. Непонятный мне тип Int[] оказался просто массивом байт, а не Integer. Написал программу, работающую со всеми функциями SDK для прибора Fasepass 7. Всё отлично, все довольны. НО. Необходимо было написать программку, которая бы обращалась к устройству с периодичностью. Например, 20 секунд. За эти 20 сек программа устанавливает связь с устройством, считывает с него необходимую инфу (список событий), удаляет прочитанную информацию и обрубает связь. Всё как бы заработало. Проходит 10-15, иногда больше циклов обращений. События считываются.. И вдруг облом. Windows говорит, что работа программы Visual Foxpro 9 прекращена. Без объяснения причин. При этом вводит прибор в такой ступор, что его приходится руками перезагружать. Разработчикам SDK я уже написал. Два дня молчат. Может у Вас есть какие-нибудь идеи? Что не устраивает Винду? На компьютере у меня 8 гиг оперативной памяти. На диске пол-террабайта свободной памяти. Винда, ессно, 64 битная. Исправлено 1 раз(а). Последнее : Victoriacom, 14.12.18 11:46 |
Re: Работа с терминалами учета рабочего времени Anviz | |
---|---|
pasha_usue Сообщений: 3649 Откуда: Е-бург Дата регистрации: 06.10.2006 |
С памятью неаккуратно работаете, значит. Скорее всего, подали короткий кусок памяти под буфер для библиотеки.
|
Re: Работа с терминалами учета рабочего времени Anviz | |
---|---|
Victoriacom Автор Сообщений: 111 Дата регистрации: 08.12.2010 |
До этого с памятью никогда не работал. Не было необходимости. Foxpro всё делал сам.
Правильно ли я делаю? В начале моего класса, при установке соединения, создаю кучу:
Потом выделяю память из этой кучи:
При разъединении коннекта (в Destroy'e класса) делаю:
Нужно ли мне использовать HeapAlloc при вызове каждой функции, и, соответственно, HeapFree - при выходе из функции. А в Desroy'e класса вызывать HeapDestroy? Исправлено 1 раз(а). Последнее : Victoriacom, 14.12.18 13:15 |
Re: Работа с терминалами учета рабочего времени Anviz | |
---|---|
Victoriacom Автор Сообщений: 111 Дата регистрации: 08.12.2010 |
Я написал маленький модуль (EXE), который делает только функции соединения с устройством, опрашивает его на предмет событий, удаляет их и разъединяется.
В вызывающей программе у меня только RUN имя_ проги теперь генерируется другая ошибка [attachment 30425 c++.jpg] Меня напрягает следующая строка в сообщении: File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c Line: 1322. У меня нет на диске F: такого пути и такого файла! Это сообщение держится несколько секунд, потом пропадает. И при следующем запуске мой экзешник уже отрабатывает нормально. Исправлено 1 раз(а). Последнее : Victoriacom, 14.12.18 16:25 |
Re: Работа с терминалами учета рабочего времени Anviz | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
В EXE-шнике (если открыть блокнотом или "фар"-ом) тоже нет этого имени, без пути?
Или не та библа, типа dbgheap, или путь dd, явно руть при разработке... Или вирус |
Re: Работа с терминалами учета рабочего времени Anviz | |
---|---|
_vit Сообщений: 5175 Дата регистрации: 29.07.2002 |
_CrtIsValidHeapPointer проверяет что указатель pUserData указывает на область памяти в куче общей для всех экземпляров С рантайм или в локальной куче в версиях до VS2010.
У вас неправильно инициализирован указатель на кучу. f:\dd\vctools\crt_bld\self_x86\crt\src\ - путь к файлу dbgheap.c на машине разработчиков С рантайм. |
Re: Работа с терминалами учета рабочего времени Anviz | |
---|---|
Victoriacom Автор Сообщений: 111 Дата регистрации: 08.12.2010 |
Я изначально пошел по неверному пути Паниковского. Насмотрелся в отладчике Visual Studio на их код.
У них под каждый буфер обмена распределяется адресная память. Например,
Фокс делает это за меня. Вместо кода:
написал:
и всё. Фокс сам передает в функцию CCHex_ClientConnect указатель на память для cBuffer. Ошибки ушли. НО. Моя программка сидит в памяти компьютера и по таймеру обрабатывает события. В момент обработки теряется фокус. Несмотря на то, что я закомментировал все WAIT WINDOW и WAIT CLEAR. Т.е, сижу в редакторе, - бац! А курсора нет. И все нажатия на клавиши улетают в неизвестность. Помогает мышка. Исправлено 3 раз(а). Последнее : Victoriacom, 18.12.18 13:08 |
© 2000-2024 Fox Club  |