Прерывания в VB

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Прерывания в VB

Сообщение SeRRg » 23.02.2005 (Ср) 10:42

Здравствуйте!
Вот столкнулся с тем,что мне надо использовать прерывания в программе. И поиск по Яндексу о использовании прерываний в VB ничего внушающего надежду не дал. Вопрос: можно ли как-нибудь их использовать без написания дополнительной DLL?
VB - это звучит!

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 23.02.2005 (Ср) 10:46

Код: Выделить всё
'This project needs a button
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Me.Caption = "Your system will sleep 5 sec."
    'Sleep for 5000 milliseconds
    Sleep 5000
    Me.Caption = ""
End Sub
Private Sub Form_Load()
    Me.Caption = ""
    Command1.Caption = "Sleep ..."
End Sub
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 23.02.2005 (Ср) 10:52

Мика, прерывания - это не совсем паузы в работе программы :?

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 23.02.2005 (Ср) 11:15

Amed писал(а):Мика, прерывания - это не совсем паузы в работе программы :?
А что?:oops:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2005 (Ср) 11:27

SeRRg, если не секрет - что именно нужно?
У меня такое предчуствие, что ты пытаешься какой-нибудь код образца 1987 г. перенести для VB6... Нет?

(Один тут уже хотел читать буфер клавиатуры из BIOS через CopyMemory %-))
Изображение

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 23.02.2005 (Ср) 11:55

2tyomitch:
В общем, предыстория: препод всячески осмеял мой VB, и сказал, что если я принесу ему хоть одн пример использования
прерываний в VB, то он мне разрешит не ходить на несколько контрольных подряд. Причем о говорил это с таким видом, что был
на 100% уверен, что мне это не удастся. У меня есть примеры на Турпаскале... нет, не 1987, а 1998 года, где используются
прерывания, и при их переносе и возник этот вопрос. В частности, я хотел использовать прерывание $13, 25, 26 для работы,
например, с дискетой, но в принципе мне достаточно любого примера, если это конечно возможно...
VB - это звучит!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2005 (Ср) 12:14

Нереально. В Win32-прогах прерывания использовать не принято, а в WinNT к тому же и невозможно.
С другой стороны, если ограничить себя Win9x, то там есть удобный интерфейс под названием VWIN32, который виртуализует как раз три названных прерывания (и ещё пару других).

А преподу можешь посмеяться в лицо и предложить сделать то же самое на делфи ;-) На 100% уверен, что ему это не удастся (при условии работоспособности в WinNT и без установки левых драйверов).
Изображение

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 23.02.2005 (Ср) 13:03

ОК. Тогда подскажи мне, как получить такой же доступ к физической записи/чтению диска в WinNT?
VB - это звучит!

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 23.02.2005 (Ср) 13:37

tyomitch писал(а):Нереально. В Win32-прогах прерывания использовать не принято, а в WinNT к тому же и невозможно.


Можно написать приложение для MS DOS, я так писал прогу низкоуровневого форматирования флопика, но есть много ограничений
Можно даже писать/читать CMOS, а запуакать в скрытом окне

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2005 (Ср) 13:40

SeRRg писал(а):ОК. Тогда подскажи мне, как получить такой же доступ к физической записи/чтению диска в WinNT?

http://bbs.vbstreets.ru/viewtopic.php?p=92153#92153

Но это не через прерывания - тебе же обязательно нужны прерывания? Или и так пойдёт?
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2005 (Ср) 13:45

Serega.I писал(а):
tyomitch писал(а):Нереально. В Win32-прогах прерывания использовать не принято, а в WinNT к тому же и невозможно.

Можно написать приложение для MS DOS

На VB-то? Ну-ну ;-)
Изображение

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 23.02.2005 (Ср) 14:10

tyomitch писал(а):На VB-то? Ну-ну ;-)


Зачем VB? MASM, TASM, TP, TC++
Компилируешь, запускаешь 1.exe >>1.log
Анализируешь данные из файла 1.log

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

Сообщение GSerg » 23.02.2005 (Ср) 14:14

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2005 (Ср) 14:17

2Serega.I:
SeRRg писал(а):препод всячески осмеял мой VB, и сказал, что если я принесу ему хоть одн пример использования
прерываний в VB

не в MASM, не в TASM, не в TP, и даже не в TC++ .
Изображение

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 23.02.2005 (Ср) 15:16

>Но это не через прерывания - тебе же обязательно нужны прерывания? Или и так пойдёт?

Если в WinNT нельзя их использовать, то мне и так пойдет.
А вообще, большое Спасибо за разъяснение и пример.
VB - это звучит!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 23.02.2005 (Ср) 16:40

SeRRg писал(а):ОК. Тогда подскажи мне, как получить такой же доступ к физической записи/чтению диска в WinNT?

Я понимаю, что подобный совет может быть запросто воспринят как издевательство (я бы так и сделал, скорее всего), но, тем не менее - DeviceIoControl(). Это - тот самый лом, против которого нет приемов. По крайней мере, в MSDN есть пример чтения физических секторов CD-ROM при помощи этой функции.

Насчет мастдая: в MSDN прямо написано, что на этих осях вызов этой функции, как правило, приводит к скрытому мэппингу на соответствующий интеррапт, причем чаще всего как раз на 21h.
Насчет NT: сначала проверь наличие админских прав. Так, на всякий случай... :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2005 (Ср) 16:53

А чем DeviceIoControl лучше того примера чтения/записи секторов, что я уже дал? Админские права нужны и тому, и другому.
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 23.02.2005 (Ср) 17:04

Ммм. Слишком уж у тебя специфично к файловой системе. Ну и закладка на константные смещения при работе с файловой системой - вот изменила Microsoft в винтукее спецификации NTFS, и что делать? Учитывая, что эта файловая система практ. не документирована как следует, полагаться на такой код весьма рискованно, согласись.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2005 (Ср) 17:09

1. У меня там FAT32 ;-)
И уж она-то прекрасно документирована.
2. А что, DeviceIoControl сам будет по каталогам ходить? Всё равно же придётся закладываться на файловую систему?
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 23.02.2005 (Ср) 17:13

Для той задачи, на которую ты дал ссылку - да, ясен пень, что по каталогам кто-то ходить должен и все такое. А вот на тему юзания прерываний безотносительно к версии винды, да еще и на VB (кажется, изначально спрашивалось именно это? - :) ) все-таки имхо лучше мое. Хотя геморроя с этой штукой - один из немногих случаев, когда сишный код получается гораздо короче VB-шного :).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2005 (Ср) 17:17

Ну да ё-моё, человеку нужно читать секторы по одному, зачем ему фаловая система вообще?
Ни одно из названных им прерываний - 13, 25, 26 - не имеет отношения ни к какой файловой системе.

И ещё, я у тебя спрашивал, чем DeviceIoControl лучше работы с файлом раздела, как у меня, а ты зачем-то перевёл разговор на файловые системы... Так чем оно всё-таки лучше? Только виндо-независимостью, или чем-нибудь ещё?
(на всякий случай - это не наезд, это вопрос)
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 23.02.2005 (Ср) 17:31

Знаю, что они не имеют отношения к DOS, я тоже когда-то писал на асме и кое-что еще помню, правда, уже плохо.
1. Во-первых, эта функция нравится мне своей правильностью и академичностью. Понимаю, что это не аргумент, но все-таки.
2. Далее, для разных осей (именно осей!) отличия по коду для нее будут минимальны. По большей части, менять придется только вызов CreateFile().
3. Ну и уж конечно, на файловую систему ей просто накласть, за исключением того, что попытки вызова контрол-кодов по работе с NTFS-specific фишками будут тупо валиться, но это очевидно.

Наверное, все.

attackie
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 29.08.2003 (Пт) 7:01
Откуда: Владивосток

темычу

Сообщение attackie » 23.02.2005 (Ср) 17:56

Тема, че у тебя е-майл гуглиный не принимает письму? :( Куда можно фалик кинуть?
---
FreeBasic Russia - http://2088pm.com/fb/ - русский фэнклуб Фрибейсика

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

Сообщение GSerg » 23.02.2005 (Ср) 17:59

Файлик можно кинуть сюда.
А его гуглиный е-майл будет тебя посылать, пока расширение zip у архива :) Сделай, к примеру, zap...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ism
Постоялец
Постоялец
 
Сообщения: 337
Зарегистрирован: 12.12.2001 (Ср) 12:59
Откуда: Russia, Saint-Petersburg

Сообщение ism » 24.02.2005 (Чт) 10:01

tyomitch писал(а):не в MASM, не в TASM, не в TP, и даже не в TC++ .

А в 32 битных приложених перехватывать прерывания сейчас невозможно MS все более и более отодвигают программиста от железа.

Все другие способы через API, возможно работают нормально, но для какой-то одной конкретной цели. VB, VC++, Delphy полностью не дадут тебе таких возможностей как 16 битне(верно и обратное)

А вообще SeRRg спорить с преподом бесполезно, они думают, что лутше нас все знают, а сами решат все старинными способами. Молодой препод - самый нормальный препод.
Я вот поспорил на автомат с одной, что напишу ей "супер прогу". Она долго восторгалась, но 5 поставила только на экзамене.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.02.2005 (Чт) 16:03

Serega.I писал(а):
tyomitch писал(а):не в MASM, не в TASM, не в TP, и даже не в TC++ .

А в 32 битных приложених перехватывать прерывания сейчас невозможно MS все более и более отодвигают программиста от железа.

Правильно, я об этом с самого начала и говорю.
Вопрос-то не в том, как перехватить прерывания, а как утереть нос преподу :-)

Serega.I писал(а):А вообще SeRRg спорить с преподом бесполезно, они думают, что лутше нас все знают, а сами решат все старинными способами.

Ну, не скажи... Я, кажется, уже рассказывал здесь про препода, который нам Си читал. Ему лет 60, и на лекциях он постоянно отвлекался на особенности Алгола, Фортрана, и ассемблера той машины, которая во время его молодости занимала весь первый этаж универа (лет 20 назад её демонтировали). Так вот, на экзамене все писали на бумажках проги на Сях, а он с одного взгляда находил там все пропущенные точки-с-запятыми и незакрытые скобки :shock:
Старый препод тоже может быть классным профессионалом.
Изображение

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 24.02.2005 (Чт) 17:43

[off]
У нас такой же гуру Пролог преподавал.
Рукописный листинг в режиме компилятора обрабатывал :)
Смотреть было жутко 8)
[/off]


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot], Yandex-бот и гости: 15

    TopList