Указатель на указатель

Простейшие вопросы в области инженерной разработки
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Указатель на указатель

Сообщение dadreamer »

Axel писал(а):размер возвращаемого адреса на unsigned char
Так вы сами можете поменять в CLFN: ПКМ -> Configure -> вкладка "Parameters" -> Len -> Data type -> Unsigned 8-bit Integer.
Axel писал(а):теперь надо заполнять массив 8 битными значениями
В CLFN на MoveBlock поменяли, осталось поменять представление у Initialize Array: ПКМ по числу-константе -> Representation -> U8.

Так. Указатель оставьте U64 (Pointer Sized Int), он не может содержать меньше 32 или 64 бит.
Axel
junior
junior
Сообщения: 51
Зарегистрирован: 15 ноя 2014, 17:26
Версия LabVIEW: 12
Контактная информация:

Re: Указатель на указатель

Сообщение Axel »

В CLFN на MoveBlock поменяли
Вы имели ввиду поменять в MoveBlock Src и Size на U8?
И не надо размер массива умножать на 4?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Указатель на указатель

Сообщение dadreamer »

Axel
2017-06-16_12-51-30.jpg
Остальное у вас вроде соответствует.
Axel писал(а):И не надо размер массива умножать на 4?
Нет, конечно. Вы же копируете байты, а не что-то другое. MoveBlock работает с байтами, ваша либа теперь тоже работает с байтами. Раньше работала с I32, а как известно, в 32-х битах 4 байта.
Axel
junior
junior
Сообщения: 51
Зарегистрирован: 15 ноя 2014, 17:26
Версия LabVIEW: 12
Контактная информация:

Re: Указатель на указатель

Сообщение Axel »

Спасибо! Но все же записать не получается...
Быть может дело в адресе на указатель... На сколько корректно, что указатель unsigned char?
unsigned int было все работало, но когда программисты поменяли формат возвращаемого значения запись не идет... А если делаю формат char, то вообще виснет...

Код: Выделить всё


int  IDLA_get_write_address(unsigned char** lpadr) //Это функция возврата адреса на указатель
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Указатель на указатель

Сообщение dadreamer »

Axel, у вас косяк в программе. Посмотрите внимательно на свой код (сверху) и на мой (снизу). Ошибка элементарная.
2017-06-16_19-05-03.jpg
Вот вам подсказка, если сами не догадаетесь.
Вложения
8bit.vi
lv2012
(8.39 КБ) 113 скачиваний
Axel
junior
junior
Сообщения: 51
Зарегистрирован: 15 ноя 2014, 17:26
Версия LabVIEW: 12
Контактная информация:

Re: Указатель на указатель

Сообщение Axel »

Спасибо огромное, за помощь, но я имел ввиду, что запись не идет в лог файл(записать не получается), по адресу да, все честно копируется... Но дальше по этому адресу куда я копирую, DLL должна взять данные и все записывать в текстовый файл(лог).. Но текстовый файл пустой... Поэтому я и обратил внимание, что формат адреса unsigned char, куда я должен скопировать данные, а потом эти данные по этому адресу(я их помещаю туда) должны уйти в лог... Когда формат был int, все шло... Извините, что столько времени отнял у Вас, думаю проблема в программистах, которые написали DLL, свяжусь с ними
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Указатель на указатель

Сообщение dadreamer »

Axel писал(а):но я имел ввиду, что запись не идет в лог файл(записать не получается)
Вы бы выражались конкретнее, а то до этого момента ни слова ни про какой лог-файл не было. Помощь помощью, а в этой теме по-моему гороскоп составить проще, чем решить какие-то элементарные проблемы.
Axel писал(а):DLL должна взять данные и все записывать в текстовый файл(лог)
Отдебажьте библиотеку, проверьте, доходят ли до неё данные (messagebox и т.п.).
Axel писал(а):Когда формат был int, все шло...
Мне кажется, от смены представления чисел запись в файл не должна отключаться. Даже если выбрано некорректное представление, в файл всё равно что-то запишется. А если пишется поток байтов в бинарном виде, то ошибиться в этом плане невозможно.

Может, какие-то не те данные шлёте или не шлёте?..
Axel
junior
junior
Сообщения: 51
Зарегистрирован: 15 ноя 2014, 17:26
Версия LabVIEW: 12
Контактная информация:

Re: Указатель на указатель

Сообщение Axel »

Спасибо за помощь, вина была за мной, в этот раз конфигурация записи в лог другая, поэтому и лог не писался, надо было начинать с программистов, а я подумал, на себя, что делаю что-то не так, извините за глупый вопрос вообщем... Хотел еще уточнить, - обязательно писать 0 на вход CLFN?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Указатель на указатель

Сообщение dadreamer »

Axel писал(а):Хотел еще уточнить, - обязательно писать 0 на вход CLFN?
Если имеется в виду вот этот ноль
2017-06-17_14-20-39.jpg
2017-06-17_14-20-39.jpg (10.16 КБ) 7658 просмотров
то его при желании можно отключить. Эта константа - инициализатор входного терминала CLFN. Когда она подключена, :labview: подстраивает тип входного параметра под эту константу. Если она не подключена, :labview: подстраивает тип входного параметра, используя индикатор на выходе из CLFN. Если же такой индикатор так же не подключен, то входной терминал будет иметь тип void (неопределён) и :labview: попросит при запуске :vi: указать тип терминала. Кроме того, данный параметр (ноль) передаётся в вызываемую DLL. Когда параметр передаётся не по указателю, то значение параметра (ноль или не ноль) важно, т.к. используется дальше в вызванной функции. Если параметр передаётся по указателю (как в вашем случае), то значение параметра не важно, т.к. будет всё равно переписано функцией в процессе вызова. Хотя, многое зависит от библиотеки. Если функция принимает параметр по указателю (по ссылке), но параметр используется для чтения, а не для записи, то тогда также важно, что вы передаёте в CLFN.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Указатель на указатель

Сообщение Blackman »

Разбирая архивы нашел эту небольшую библиотеку. Возможно есть и в VIPM-e. Я добавил расширение .zip для быстрого доступа, просмотра и установки руками. Для установки при помощи VIPM удалить это расширение.
Вложения
vug_lib_memblock_lv82-1002.vip.zip
(80.46 КБ) 105 скачиваний
Axel
junior
junior
Сообщения: 51
Зарегистрирован: 15 ноя 2014, 17:26
Версия LabVIEW: 12
Контактная информация:

Re: Указатель на указатель

Сообщение Axel »

Спасибо огромное за помощь!!!
Ответить

Вернуться в «Для чайников»