:: Visual Foxpro, Foxpro for DOS
Re: Преобразование кода из C в VFP9
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
у них где то есть примеры запуска?
Попробуй не из фокса, а прямо из того что они рекомендуют.
Отработает?
попробуй там отследить, порядок вызова...


------------------
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
Victoriacom
Автор

Сообщений: 112
Дата регистрации: 08.12.2010
lulgu
Посмотрите еще раз тщательно файлы /h, там должны быть определения int[] DevIdx, int[] Type,.
Буфер это не структура.
Буфер декларируется так - ,STRING @lcBuffer,INTEGER lnLenBuff,
Попробуйте, вернется ли хоть что-то:
lnLenBuff = 100
lcBuffer = REPLICATE(CHR(0),lnLenBuff)

IntPtr это INTEGER, но может оказаться LONG, STRING.
Для работы с памятью вам достаточно PChar.
Говоря "структура", я имею ввиду содержимое памяти по заданному адресу, которую я прочитал в символьную переменную, которую мне нужно разбить на указанную в SDK структуру.

Декларирую и так (STRING @) и эдак (INTEGER @). Разница в том, что в первом случае я получаю готовый буфер, во втором читаю буфер из SYS(2600,nAddr,nLen).
Размеры буфера устанавливал разные (в их проекте = 16000). Чистил перед вызовом нулями. Проблема в том, что поскольку код возврата -1, буфер после вызова не меняется.
С LONG - INTEGER тоже поигрался.
Ratings: 0 negative/0 positive
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
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Так на шарпе, именно пример вызова их драйвера?
А что крутится... может так и надо. Система распознавания лиц на проходной. Постоянно контроль...
Кто их знает, их задумку)))


------------------
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Victoriacom
Может мне тоже засунуть этот вызов в таймер? Попробую...
так там определенное кол-во срабатываний, или как?

Найди в проекте вызов CChex_Update
Попробуй найти момент запуска.
Встань на него, посмотри откуда и как вызывается.
в конце -концов, прямо на 1ю строку в main)))
И дальше по F10 - F11

Ну и тупо, повтори ВЕСЬ функционал на фоксе.
Когда заработает, можно пробовать сокращать...
а можно и оставить))))


------------------
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
Victoriacom
Автор

Сообщений: 112
Дата регистрации: 08.12.2010
Аспид
Victoriacom
Может мне тоже засунуть этот вызов в таймер? Попробую...
так там определенное кол-во срабатываний, или как?
Поставил точку останова на вызов. Жму F5 - опять на ней. Количество срабатываний наврядли. Насчитал 150, дальше устал.
Убираю точку останова, - запускается форма.
Но это все находится в методе, связанном с таймером.
Ratings: 0 negative/0 positive
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
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Попробуйте еще так:
lcDevIdx = REPLICATE(CHR(0),1)
lcType = REPLICATE(CHR(0),1)
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
Victoriacom
Автор

Сообщений: 112
Дата регистрации: 08.12.2010
lulgu
Попробуйте еще так:
lcDevIdx = REPLICATE(CHR(0),1)
lcType = REPLICATE(CHR(0),1)
Да, и так работает. Меня сбивал этот тип int[]. Тем более, что в своих примерах китайцы передавали явный int. Например, 1 или 0.
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Victoriacom
lulgu
Попробуйте еще так:
lcDevIdx = REPLICATE(CHR(0),1)
lcType = REPLICATE(CHR(0),1)
Да, и так работает. Меня сбивал этот тип int[]. Тем более, что в своих примерах китайцы передавали явный int. Например, 1 или 0.

Вам осталось попробовать lcDevIdx = CHR(0) и убрать @.
Ratings: 0 negative/0 positive
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
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
В Help это все есть.
Тип данных может быть: INTEGER,SINGLE,DOUBLE,LONG,STRING; массивы не упоминаются.
Знак @ означает передачу параметра по ссылке и он должен быть в DECLARE и в вызове функции; иначе параметр посылается по значению.
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> он должен быть в DECLARE и в вызове функции; иначе параметр посылается по значению
Лулгу, твое мнение посчитано, и мое тоже. Послушаем более компетентных товарищей, хорошо?
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Фантомас Оффа начинает сердиться...
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Не нагнетай, обычная ситуация: кто-то тролит, кто-то тупит, кто-то собственно делает.
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
of63
> он должен быть в DECLARE и в вызове функции; иначе параметр посылается по значению
Лулгу, твое мнение посчитано, и мое тоже. Послушаем более компетентных товарищей, хорошо?

ТС ведь не может проверить ваше мнение - там даже назначение nAddr все еще под сомнением, а другие параметры функция не возвращает.
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Наш нормальный ТС проверит мои предположения простой заменой 2х строк кода (если захочет). А вот ты вообще ничего не заменишь, у тебя кода нет.

В восхищении, что ТС запустил (уже оживил) китайскую поделку, в онлайне показал нам нам описание, демку, из которой он это сделал. Молодец!. 5+
Ну, недалеко и собственно онлайнвидео, опознавалки, или для чего там сделана эта фиговина )

Кстати, подумал - это же онлайн видео, может поэтому там что-то вызывается по таймеру, с какой-то частотой около 100 Гц...



Исправлено 3 раз(а). Последнее : of63, 26.10.18 23:49
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
of63
Наш нормальный ТС проверит мои предположения простой заменой 2х строк кода (если захочет). А вот ты вообще ничего не заменишь, у тебя кода нет.

Если самой функцией не предусмотрено возвращение значений по ссылке, то двумя строками кода дела не поправишь.
И временно буфер он организовал, чтобы только проверить факт работоспособности функции, а там ведь сидит работа через память.



Исправлено 1 раз(а). Последнее : lulgu, 26.10.18 23:47
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> возвращение значений по ссылке, то двумя строками кода дела не поправишь.
разделю
> возвращение значений по ссылке,
> то двумя строками кода дела не поправишь.

Что за новая свежая мысль, Лулгу?

Не Лулгу, у тебя нет саморегуляционного механизма (ну, что ты особенный член мембер - это понятно). Но слабый совет - сбавь обороты. Если ты сам просто такой - это одно, но если ты себя мнишь аналитиком форума (было в твоем начаое такое), то ... будь аналитегом, а не ... скушным докопальщиком говна.



Исправлено 1 раз(а). Последнее : of63, 27.10.18 00:00
Ratings: 0 negative/0 positive
Re: Преобразование кода из C в VFP9
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
of63
> возвращение значений по ссылке, то двумя строками кода дела не поправишь.
разделю
> возвращение значений по ссылке,
> то двумя строками кода дела не поправишь.

Что за новая свежая мысль, Лулгу?

Не Лулгу, у тебя нет саморегуляционного механизма (ну, что ты особенный член мембер - это понятно). Но слабый совет - сбавь обороты. Если ты сам просто такой - это одно, но если ты себя мнишь аналитиком форума (было в твоем начаое такое), то ... будь аналитегом, а не ... скушным докопальщиком говна.


Ниче себе - передача параметров по ссылке стало свежей мыслейю.
Ладно, пока, а то опять заносить тебя стало.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 34 (Гостей: 34)

© 2000-2024 Fox Club 
Яндекс.Метрика