Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 15

Проблема с отсутствием Variant

30.06.2024, 22:32. Показов 562. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
Переношу софт с VBA на VB-NET, особых проблем нет, практически всё идёт один в один (в части кода),
единственная проблема - это отсутствие типа Variant в VB-NET, может кто подскажет:

Есть часть кода на vba:
VB.NET Скопировано
1
2
3
Dim V as Variant
V = fun1()      ' fun1 возвращает Byte() 
Call sub1(V)
и на VBA всё летало...
как это реализовать на VB-NET ?
Проблема в том, то так
VB.NET Скопировано
1
Call sub1(fun1())
не прокатывает, ибо обращение идет к аппаратной части, которая не поддерживает команду в команде,
нужна последовательность команд
VB.NET Скопировано
1
Dim V as Object
Тоже не работает, на втором операторе получатся ошибка типа
Неподдерживаемый тип параметра в COM-обертке
VB.NET Скопировано
1
Dim V as Byte()
Тоже не работает, ошибка та же, упирается в неизвестный размер ByteArray
Какие есть идеи?
Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.06.2024, 22:32
Ответы с готовыми решениями:

Проблема с JIT отладчиком (точнее с его отсутствием)
Всем привет! (может не по адресу конечно...отправьте в более подходящую ветку) Помогите разрулить ситуацию пожалуйста. Есть...

Проблема с отсутствием звука в некоторых программах
Здраствуйте! Суть такова: Я пользуюсь наушниками со звуковой картой (Razer Kraken 7.1) через активный кабель-усилитель. Недавно винда...

Проблема с разрешением и отсутствием рабочего стола
Приветствую! Прошу помощи. После установки в чистой WINDOWS 10 видеодрайвера начинаются проблемы с рабочим столом (пропадают иконки...

8
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
01.07.2024, 06:31
vmag, Что выполняет fun1()? Может ее исправить на возврат нужного вам типа данных (массив, строка или что там у Вас), и не использовать тип Variant вообще, тем самым не плодить костылей.
1
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 15
01.07.2024, 11:18  [ТС]
К сожалению функции и процедуры это софт стороннего разработчика к аппаратной части...
Сама функция по документации выглядит так:
VB.NET Скопировано
1
Function fun1(L1 As Long) As Byte()
В лог файле у неё выход примерно такой
EE 04 03 00 30 33 30 EF 04 0A 00 32 31 2E 31 31 2E 32 30 32 33 F0 04 04 00 31 39 34 34 F1 04 3E 00 22 55 55 49 44 3D 34 30 34 62 38 64 35 39 2D 63 64 35 61 2D 34 36 35 38 2D 39 32 34 37 2D 66 34 63 36 38 63 35 32 62 37 61 30 26 54 69 6D 65 3D 31 37 31 39 37 36 32 34 30 34 39 38 36 22
Процедура по документации
VB.NET Скопировано
1
Sub sub1(L1 As Long, value)
C Long проблем нет, не могу найти альтернативу Variant, который удивительным образом
справлялся с переносом Byte() в качестве value в процедуру sub1
и это работало (рабочие параметры для понимания проблемы пропущены)
VB.NET Скопировано
1
2
3
Dim V as Variant
V = fun1()      ' fun1 возвращает Byte() 
Call sub1(V)
Ну, грубо говоря, в переменную Variant попадало вот это
EE 04 03 00 30 33 30 EF 04 0A 00 32 31 2E 31 31 2E 32 30 32 33 F0 04 04 00 31 39 34 34 F1 04 3E 00 22 55 55 49 44 3D 34 30 34 62 38 64 35 39 2D 63 64 35 61 2D 34 36 35 38 2D 39 32 34 37 2D 66 34 63 36 38 63 35 32 62 37 61 30 26 54 69 6D 65 3D 31 37 31 39 37 36 32 34 30 34 39 38 36 22
А потом Value этой переменной успешно переваривала sub1
0
run
 Аватар для I can
4745 / 4312 / 820
Регистрация: 13.04.2015
Сообщений: 9,352
01.07.2024, 12:17
Цитата Сообщение от vmag Посмотреть сообщение
C Long проблем нет
На всякий случай: Long в VBA это Integer в VB.Net.
0
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 15
01.07.2024, 12:48  [ТС]
Дошел до этого:

VB.NET Скопировано
1
2
3
Dim b1 As Byte() = fun1()      ' получение Byte()
MsgBox(b1.Length)                ' попало 95 элементов в массив и это нормально, см выше EE 04 03 00 30 33 30 EF 04 0A 00 32 31 2E 31 31 2E....
Call sub1(b1)                         ' аппарат попадает в ступор
такое ощущение что нужно массив b1 преобразовать в строку и засунуть в sub как Value
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17898 / 13994 / 5345
Регистрация: 17.03.2014
Сообщений: 28,652
Записей в блоге: 1
01.07.2024, 12:52
Цитата Сообщение от vmag Посмотреть сообщение
Процедура по документации
VB.NET Скопировано
1
Sub sub1(L1 As Long, value)
...
Дошел до этого:
VB.NET Скопировано
1
Call sub1(b1)
Почему вы передаете один аргумент там где ожидается два? И почему массив передается через Long?
0
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 15
01.07.2024, 14:13  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Почему вы передаете один аргумент там где ожидается два?
потому что к лонгам вопросов нет и я их не показываю при описании проблемы...
к каждому коду выше есть пояснения...

главная проблема - передача Byte() в процедуру как Value, с чем раньше Variant справлялся на ура и которого сейчас нет

Добавлено через 1 час 0 минут
Спасибо всем, проблема решена на аппаратном уровне, без танцев с бубном...
Использовал другую функцию, которая возвращает не массив Byte(), а тоже самое, но в виде строки Hex
Соответственно Sub обработала её как Value без проблем.

В общем сложно сказать: отсутствие Variant в VB-NET это хорошо или плохо, особенно в разрезе перехода на него
с VBA... Убил почти сутки, нужно бросать привычку работать без документации...
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
01.07.2024, 15:06
vmag, Тоесть в параметр Value нужно было передать строку HEX, а не массив byte()? Ну получить строку Hex в VB.NET тоже можно и передавать ее.
А почему такая разница, Вы спрашивали... Там Long, Variant, тут Integer и т.п., так это потому, что разные языки, хоть и синтаксис похож чем-то.
0
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 15
01.07.2024, 15:56  [ТС]
Цитата Сообщение от Yury Komar Посмотреть сообщение
Тоесть в параметр Value нужно было передать строку HEX, а не массив byte()?
Детали трудно понять, чужое (железо + софт) это черный ящик, но Variant успешно брал в себя byte() и с таким
же успехом отдавал его с нужным Value дальше
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.07.2024, 15:56
Помогаю со студенческими работами здесь

Пример функции с отсутствием границы
Подскажите, пожалуйста, пример функции f(x, y), которая по всем прямым при подходе к точке (0, 0) стремится к нулю а при приближении к...

Условие с отсутствием нуля в массиве
Я разобрался как находить какой либо элемент в массиве и отталкиваясь от него,производить какие либо действия.Но как мне добавить условие,...

Обработка ситуации с отсутствием интернета
всем привет форумчане. помогите как можно эту окошку(если интернет выключен или сайт не доступен выдает так) заменить на такую...

Условие поиска за отсутствием данных в таблице
Здравствуйте форумчане. Проблема такая. Программа с базой данных MySQL "Выдача книг библиотекой", нужно выполнить поиск читателя и...

Приблизить функцию Сплайном с отсутствием узла
Исходная задача: Взять функцию 5sin(x^2) , отрезок и точность E=0.01 Приблизить функцию методом интерполяции Сплайн с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер