Определить тип переменной

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Fencer
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 01.06.2005 (Ср) 16:19
Откуда: Новосибирск

Определить тип переменной

Сообщение Fencer » 29.10.2005 (Сб) 15:20

Вот скажите мне - в программе нужен обработчик - если переменная Variant содержит данные вот такого типа, then... Причём Variant может содержать и данные моего, самодельного типа... Это, наверно, глупый вопрос, но вы всё-таки подскажите...
Искал Гуглом и Яндексом.
Искал по форуму.
Спрашивал соседа.
Пытался сделать сам.
Спасибо за помощь ;)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.10.2005 (Сб) 15:21

vartype
typename
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Fencer
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 01.06.2005 (Ср) 16:19
Откуда: Новосибирск

Сообщение Fencer » 29.10.2005 (Сб) 15:24

И ещё - не надо, Пожалуйста, давать ответы типа "ВсамомделеглупыйвопросчитайMSDN". Очень, знаете ли, расстраивает, когда опытные, серьёзные люди, которые здесь, чтобы (я думаю) отвечать на вопросы неопытных, сначала объяснят, какой ламер этот неопытный, а потом дадут 2-3 ссылки (одна из них http://msdn.microsoft.com/ либо www.google.ru). Вы уж извините, кого мои слова задели... Наболело
Искал Гуглом и Яндексом.
Искал по форуму.
Спрашивал соседа.
Пытался сделать сам.
Спасибо за помощь ;)

Fencer
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 01.06.2005 (Ср) 16:19
Откуда: Новосибирск

Сообщение Fencer » 29.10.2005 (Сб) 15:25

Спасибо, друг :)
Искал Гуглом и Яндексом.
Искал по форуму.
Спрашивал соседа.
Пытался сделать сам.
Спасибо за помощь ;)

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 30.10.2005 (Вс) 6:12

Fencer
Чтобы этого не случилось, просто укажи в описании проблемы, что именно ты предпринял для поиска ответа :)

А то, такого рода вопросы вызывают искреннее недоумение - "неужели нельзя было воспользоваться Гуглом (6-ая ссылка сверху)." :)
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Yerro
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 9
Зарегистрирован: 16.07.2008 (Ср) 21:23

Re: Определить тип переменной

Сообщение Yerro » 20.06.2009 (Сб) 15:13

Добрый день.
Как это сделать, зная значение указателя на переменную.
И можно ли в таком случае изменить её тип?
Спасибо.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Определить тип переменной

Сообщение Хакер » 20.06.2009 (Сб) 16:21

Чего?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Определить тип переменной

Сообщение Viper » 20.06.2009 (Сб) 16:27

Yerro писал(а):Добрый день.
Как это сделать, зная значение указателя на переменную.
И можно ли в таком случае изменить её тип?
Спасибо.
1. Никак (в VB).
2. Не имеет смысла.
А подробнее, что ты хочешь?
З.Ы. И вообще сие есть некрофилия.
Весь мир матрица, а мы в нем потоки байтов!

Yerro
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 9
Зарегистрирован: 16.07.2008 (Ср) 21:23

Re: Определить тип переменной

Сообщение Yerro » 20.06.2009 (Сб) 17:51

Долгая история.
Началось всё с функции "GetJob()" из "winspool.drv". Есть там аргумент такой "ByRef pjob as Byte".
Документации вразумительной касательно этой функции и VB я не нашёл.
В сях пишут, что pjob - это указатель на тип Byte (LPBYTE).
Пытаюсь понять, зачем функции нужен именно байтовый тип и что она сохраняет в pjob (или в массиве pjob()).
Есть предположение, что каждые четыре байта этого массива (если функция "GetJob()" туда вообще что-нибудь пишет), будучи рассмотрены как один четырёхбайтный,
дадут мне указатели на значения для структуры JOB_INFO_1, по аналогии с GetPrinter() и PRINTER_INFO_1.
Просматривать собирался с помощью функции, которая получив указатель на переменную создаёт массив указанного типа (допустим, из 16 переменных Byte
массив из 4 переменных типа Long).
Тип переменной и параметр cbElements в SAFEARRAY определяли бы что представлять и в каком виде.
Объявить хотелось как Public Sub DecompToArr(ByVal pVariable As Long, ByVal pArray As Long, Optional ByVal cbElements As Long = 4)
С другой стороны, можно передавать и указатель на переменную, и параметр "ByVal VarType(var) as vbVarType" в дополнение к нему и обойти вопрос.

Вы настаиваете, что тип переменной по значению указателя в VB6 определить невозможно без помощи VarType или TypeName?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Определить тип переменной

Сообщение Viper » 20.06.2009 (Сб) 19:33

Объявляй lpJob как Long и это будет указателем на буфер принимающий либо JOB_INFO_1 либо JOB_INFO_2 в зависимости от значения аргумента Level. А объявлен этот указатель как LPBYTE по причине того, что размер этого буфера недетерменирован поскольку содержит строки.
Весь мир матрица, а мы в нем потоки байтов!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Определить тип переменной

Сообщение Viper » 20.06.2009 (Сб) 19:35

Yerro писал(а):Вы настаиваете, что тип переменной по значению указателя в VB6 определить невозможно без помощи VarType или TypeName?
И даже с помощью VarType или TypeName тип переменной по указателю не определишь. И не только в VB.
Весь мир матрица, а мы в нем потоки байтов!

Yerro
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 9
Зарегистрирован: 16.07.2008 (Ср) 21:23

Re: Определить тип переменной

Сообщение Yerro » 20.06.2009 (Сб) 21:25

Спасибо.
Это всё понятно.
Непонятно, зачем APIViewer этот аргумент объявляет в типе byte, по-моему, не в самом подходящем типе для хранения указателей.
Должны же быть какие-то предпосылки, или это просто ошибка :?:

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Определить тип переменной

Сообщение Viper » 20.06.2009 (Сб) 21:46

Yerro писал(а):Спасибо.
Это всё понятно.
Непонятно, зачем APIViewer этот аргумент объявляет в типе byte, по-моему, не в самом подходящем типе для хранения указателей.
Должны же быть какие-то предпосылки, или это просто ошибка :?:
В данном случае API Viewer совершенно неправ. Указатель должен быть типа Long.
З.Ы. Впрочем возможны варианты, но не в этом случае.
Весь мир матрица, а мы в нем потоки байтов!

Yerro
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 9
Зарегистрирован: 16.07.2008 (Ср) 21:23

Re: Определить тип переменной

Сообщение Yerro » 20.06.2009 (Сб) 22:24

А всё-таки функция и с byte массивом корректно работает.
Наверное, подразумевается, что получатель из байтов соберёт и указатели, и параметры задания самостоятельно.
Интересно, SetJob и SetPrinter настолько же толерантны к типу передаваемой структуры или придётся расчленять длинные целые обратно :?:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Определить тип переменной

Сообщение alibek » 20.06.2009 (Сб) 23:16

Им безразличен тип структуры.
Им важен только ее размер.
А будет это один Long, два Integer, четыре Byte или один Single — совершенно без разницы.
Lasciate ogni speranza, voi ch'entrate.

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Определить тип переменной

Сообщение Alec » 21.06.2009 (Вс) 7:48

Viper писал(а):
Yerro писал(а):Спасибо.
Это всё понятно.
Непонятно, зачем APIViewer этот аргумент объявляет в типе byte, по-моему, не в самом подходящем типе для хранения указателей.
Должны же быть какие-то предпосылки, или это просто ошибка :?:
В данном случае API Viewer совершенно неправ. Указатель должен быть типа Long.
З.Ы. Впрочем возможны варианты, но не в этом случае.

Не сказал бы что сильно не прав - просто калька с LPBYTE.
А указатель и есть типа Long. В объявлении функции обращаем внимание на ByRef аргумента. Т.е. независимо от типа, будет передаваться указатель.
Иногда лучше вовремя остановиться...
И начать заново!

Yerro
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 9
Зарегистрирован: 16.07.2008 (Ср) 21:23

Re: Определить тип переменной

Сообщение Yerro » 21.06.2009 (Вс) 13:58

Alec писал(а):А указатель и есть типа Long. В объявлении функции обращаем внимание на ByRef аргумента. Т.е. независимо от типа, будет передаваться указатель.


Точно так.
Поменял объявление API на "ByVal pJob As Long", подставил в коде "VatPtr(MyArr(0))" - работает.
Жаль, что с указателем на структуру не сработает.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 51

    TopList  
cron