Re: Преобразование кода из C в VFP9 | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
у них где то есть примеры запуска?
Попробуй не из фокса, а прямо из того что они рекомендуют. Отработает? попробуй там отследить, порядок вызова... ------------------ |
Re: Преобразование кода из C в VFP9 | |
---|---|
Victoriacom Автор Сообщений: 112 Дата регистрации: 08.12.2010 |
Говоря "структура", я имею ввиду содержимое памяти по заданному адресу, которую я прочитал в символьную переменную, которую мне нужно разбить на указанную в SDK структуру. Декларирую и так (STRING @) и эдак (INTEGER @). Разница в том, что в первом случае я получаю готовый буфер, во втором читаю буфер из SYS(2600,nAddr,nLen). Размеры буфера устанавливал разные (в их проекте = 16000). Чистил перед вызовом нулями. Проблема в том, что поскольку код возврата -1, буфер после вызова не меняется. С LONG - INTEGER тоже поигрался. |
Re: Преобразование кода из C в VFP9 | |
---|---|
Victoriacom Автор Сообщений: 112 Дата регистрации: 08.12.2010 |
Я получил от них проект на C#. Установил себе экспериментальную версию Visual Studio 2017. Научился запускать отладку. Порядок вызова просёк. Проект - это собственно форма. Вернее 2 формы. Форма запуска и форма с разными кнопками, чтобы играться. У них, действительно все работает (вру, - полно глюков. Но самые важные функции работают). Есть странность. Пока форма запуска еще не визуализировалась (что-то типа нашего LOAD), у них впустую крутятся вызовы моей любимой функции CChex_Update. По таймеру с интервалом 100. Она все время возвращает ноль. Зачем это? Потом идет порядок вызовов других функций, который я повторил у себя. Затем опять ихний вызов CChex_Update, который уже возвращает то что нужно. У них. У меня пока нет. Может мне тоже засунуть этот вызов в таймер? Попробую... Исправлено 1 раз(а). Последнее : Victoriacom, 26.10.18 14:38 |
Re: Преобразование кода из C в VFP9 | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Так на шарпе, именно пример вызова их драйвера?
А что крутится... может так и надо. Система распознавания лиц на проходной. Постоянно контроль... Кто их знает, их задумку))) ------------------ |
Re: Преобразование кода из C в VFP9 | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
так там определенное кол-во срабатываний, или как? Найди в проекте вызов CChex_Update Попробуй найти момент запуска. Встань на него, посмотри откуда и как вызывается. в конце -концов, прямо на 1ю строку в main))) И дальше по F10 - F11 Ну и тупо, повтори ВЕСЬ функционал на фоксе. Когда заработает, можно пробовать сокращать... а можно и оставить)))) ------------------ |
Re: Преобразование кода из C в VFP9 | |
---|---|
Victoriacom Автор Сообщений: 112 Дата регистрации: 08.12.2010 |
Поставил точку останова на вызов. Жму F5 - опять на ней. Количество срабатываний наврядли. Насчитал 150, дальше устал. Убираю точку останова, - запускается форма. Но это все находится в методе, связанном с таймером. |
Re: Преобразование кода из C в VFP9 | |
---|---|
Victoriacom Автор Сообщений: 112 Дата регистрации: 08.12.2010 |
Вот где зарылась собака!В типах параметров. Хитрый тип int[] оказался эквивалентом нашего массива. Во-первых,вместо объявления DECLARE INTEGER CChex_Update IN tc-b_new_sdk.dll ; LONG hHandle, INTEGER nDevIdx, INTEGER nType, STRING @ ptrBuffer, INTEGER nLen написал DECLARE INTEGER CChex_Update IN tc-b_new_sdk.dll ; LONG hHandle, STRING @nDevIdx, STRING @nType, STRING @ ptrBuffer, INTEGER nLen Во-вторых. Параметры объявил массивами LOCAL ARRAY aDevIdx[1] aDevIdx[1] = BINTOC(1,'4RS') LOCAL ARRAY aType[1] aType[1] = BINTOC(0,'4RS') и занес туда бинарные значения. И эта nRet = CChex_Update(phHandle, @aDevIdx, @aType, @cBuffer, nLen) nRet получился 52, а это номер типа структуры, которую я должен расшифровать! Сдвинулся, наконец. Спасибо всем за участие в моей проблеме!Исправлено 2 раз(а). Последнее : Victoriacom, 26.10.18 17:56 |
Re: Преобразование кода из C в VFP9 | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Попробуйте еще так:
lcDevIdx = REPLICATE(CHR(0),1) lcType = REPLICATE(CHR(0),1) |
Re: Преобразование кода из C в VFP9 | |
---|---|
Victoriacom Автор Сообщений: 112 Дата регистрации: 08.12.2010 |
Да, и так работает. Меня сбивал этот тип int[]. Тем более, что в своих примерах китайцы передавали явный int. Например, 1 или 0. |
Re: Преобразование кода из C в VFP9 | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Вам осталось попробовать lcDevIdx = CHR(0) и убрать @. |
Re: Преобразование кода из C в VFP9 | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Хитрый тип int[] оказался эквивалентом нашего массива.
Формально LOCAL ARRAY aDevIdx[1] aDevIdx[1] = BINTOC(1,'4RS') LOCAL ARRAY aType[1] aType[1] = BINTOC(0,'4RS') nRet = CChex_Update(phHandle, @aDevIdx, @aType, @cBuffer, nLen) должно сработать одинаково и при LOCAL aDevIdx aDevIdx = BINTOC(1,'4RS') LOCAL aType aType = BINTOC(0,'4RS') nRet = CChex_Update(phHandle, @aDevIdx, @aType, @cBuffer, nLen) По фоксовым правилам имен, применение имени массива (без указания индекса) совпадает с применением первого элемента массива. Но в случае с DECLARE-функций это может быть и не так. Если возможно, попробуйте без массивов. Интересно на реальном эксперименте (и вы в теме!) узнать, отличает ли DECLARE-функция фоксовый массив от немассива? (тем более одноэлементный - он не показатель, и еще, мы же не ждем от функции чтения/заполнения элементов массива после первого... или ждем?) Доб. И еще.Если убрать улитки в вызове CChex_Update(phHandle, @aDevIdx, @aType, @cBuffer, nLen), то "все сломается"? или нет? (это я проверяю, с вашей помощью, предположение, что преобразование в адрес делает все же улитка в DECLARE, а не в вызове) Доб2. Редко приходится обращаться к API и DLL-кам. Обычно, помучаешься несколько времени, найдешь комбинацию параметров, оформишь все это обращение в подпрограмму, и забудешь навсегда, ... в буквальном смысле ) Когда вещь работает, то забываешь как это сделано, хотя сам же и делал. Смотришь... как утром бывает, девушка стоит около машины, капот открыт, смотрит в мотор, не заводится вероятно, она пытается вспомнить, вроде мотор... аккум... бензин... все есть, а не работает почему-то ) Доб3. Даже на "вы" перешел. Извини ) Исправлено 5 раз(а). Последнее : of63, 26.10.18 22:36 |
Re: Преобразование кода из C в VFP9 | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
В Help это все есть.
Тип данных может быть: INTEGER,SINGLE,DOUBLE,LONG,STRING; массивы не упоминаются. Знак @ означает передачу параметра по ссылке и он должен быть в DECLARE и в вызове функции; иначе параметр посылается по значению. |
Re: Преобразование кода из C в VFP9 | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> он должен быть в DECLARE и в вызове функции; иначе параметр посылается по значению
Лулгу, твое мнение посчитано, и мое тоже. Послушаем более компетентных товарищей, хорошо? |
Re: Преобразование кода из C в VFP9 | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
|
Re: Преобразование кода из C в VFP9 | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Не нагнетай, обычная ситуация: кто-то тролит, кто-то тупит, кто-то собственно делает.
|
Re: Преобразование кода из C в VFP9 | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
ТС ведь не может проверить ваше мнение - там даже назначение nAddr все еще под сомнением, а другие параметры функция не возвращает. |
Re: Преобразование кода из C в VFP9 | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Наш нормальный ТС проверит мои предположения простой заменой 2х строк кода (если захочет). А вот ты вообще ничего не заменишь, у тебя кода нет.
В восхищении, что ТС запустил (уже оживил) китайскую поделку, в онлайне показал нам нам описание, демку, из которой он это сделал. Молодец!. 5+ Ну, недалеко и собственно онлайнвидео, опознавалки, или для чего там сделана эта фиговина ) Кстати, подумал - это же онлайн видео, может поэтому там что-то вызывается по таймеру, с какой-то частотой около 100 Гц... Исправлено 3 раз(а). Последнее : of63, 26.10.18 23:49 |
Re: Преобразование кода из C в VFP9 | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Если самой функцией не предусмотрено возвращение значений по ссылке, то двумя строками кода дела не поправишь. И временно буфер он организовал, чтобы только проверить факт работоспособности функции, а там ведь сидит работа через память. Исправлено 1 раз(а). Последнее : lulgu, 26.10.18 23:47 |
Re: Преобразование кода из C в VFP9 | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> возвращение значений по ссылке, то двумя строками кода дела не поправишь.
разделю > возвращение значений по ссылке, > то двумя строками кода дела не поправишь. Что за новая свежая мысль, Лулгу? Не Лулгу, у тебя нет саморегуляционного механизма (ну, что ты особенный Исправлено 1 раз(а). Последнее : of63, 27.10.18 00:00 |
Re: Преобразование кода из C в VFP9 | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Ниче себе - передача параметров по ссылке стало свежей мыслейю. Ладно, пока, а то опять заносить тебя стало. |
© 2000-2024 Fox Club  |