Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2013, 20:06   #11
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
т.о. второй, "неправильный" вариант, - работает!!
Почему же он неправильный?
var-параметр - это и есть в Паскале/Делфи передача параметра по адресу.

При передаче по адресу (в отличие от передачи по значению) можно указывать адрес первого элемента, а в вызывающей процедуре обращаться к нему как к массиву.
Если есть возможность, можно поправить прототип функции:
Код:
function PI_qMOV(ID: LongInt; const szAxes: PChar; var pdValueArray:array of Double): Bool cdecl {$IFDEF WIN32} stdcall {$ENDIF};
s-andriano вне форума Ответить с цитированием
Старый 07.06.2013, 01:45   #12
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

тоже вариант

А ещё мне сегодня ночью, как, прошу прощения за скромность, таблица менделеева его автору, приснилась следующая идея:

раз на вход функции приходит указатель, значит она его разыменовывает внутри, указатель на значение конкретного параметра, т.е. если правильно проводить аналогию, как я передавал массив в её "собрата" PI_qMOV, ей нужно передавать не ссылку на массив of Double, а простой массив указателей!

то есть ввести arrayOfPfloat6: array [0..5] of PDouble и сунуть в функцию его первый элемент, т.е. как-то так:


Код:
var arrayOfPfloat6: array [0..5] of PDouble;
...
...заполняю массив 
...
    FunctRes := PI_MOV(ID, '', arrayOfPfloat6[0]);
...
и всё!

сегодня днём сгоняю в цех, опробую, если получится (а подозреваю что всё должно сработать) - хоть головой об стенку бейся, зачем я тут людям мозги выклёвываю, и разработчику тоже, ведь логически нужно делать именно так!

Последний раз редактировалось AnTe; 07.06.2013 в 01:53.
AnTe вне форума Ответить с цитированием
Старый 07.06.2013, 15:31   #13
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Провидение не помогло. Не работает!

s-andriano, Вы имели в виду подправить в заголовочном файле?

Пробовал - тоже не работает правда, я забыл, вываливается с ошибкой доступа по памяти или просто пиликает ошибку



похоже, полный финиш

пока у меня остаются два варианта - изучать работу с указателями и (или) засунуть длл в дизассемблер и посмотреть предметно что там как распределяется
AnTe вне форума Ответить с цитированием
Старый 19.06.2013, 13:55   #14
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Ларчик просто открывался.

Передача данных происходила абсолютно верно. Причём работают оба предложенных варианта: если в функцию передавать просто первый элемент массива, или писать перед ним "@".

Дело было в другом - ошибке производителя.

Про параметр sAxes в документации написано, что
3.3.2. Axis Identifiers
Many commands accept one ore more axis identifiers. If no axes are specified (either by giving an empty string or a NULL pointer) some commands will address all connected axes.

И действительно, и в М-850, и для практически всех функций Н-850, включая PI_qMov - пустая строка подходит: функции работают в соответствии с документацией.
В PI_MOV видимо забыли это реализовать.

Как только передал строку, 'X Y Z U V W' - всё заработало.


Более того - в М-850 если было большое желание, можно было тоже оси задавать явно, но без пробелов, поэтому я с самого начала пробовал вариант с 'XYZUVW' - не работало тоже, но с пустой строкой в соответствии и с новой документацией работали все функции, кроме MOV, поэтому эксперименты с параметром axis прекратились.

программа работает с использованием другой функции, переделывать не стал, разработчик уведомлен, тему можно закрывать

Спасибо всем ответившим. Если бы не ваша поддержка, я бы ещё долго лопатил документацию по винде, пребывая в уверенности, что делаю что-то не так.

Последний раз редактировалось AnTe; 19.06.2013 в 13:58.
AnTe вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно написать программу под WinCE управление внешним устройством kompotius Фриланс 0 16.05.2012 16:32
Получение данных из сторонней dll Memfis1992 Общие вопросы Delphi 4 21.10.2010 09:19
удаленное управление устройством! Gambler Работа с сетью в Delphi 11 29.10.2009 12:12
Управление исполнительным устройством через компьютер Scutarius Свободное общение 3 28.07.2009 15:56
Проблемы с типами данных в Delphi Paul11j Помощь студентам 4 15.05.2009 22:59