Операционно-системный исполняемый дуализм

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Операционно-системный исполняемый дуализм

Сообщение GSerg » 24.04.2003 (Чт) 8:15

Ааааааааа... 8)
Как приятно наконец-то снова дорваться до инета... 8)
Хотя правила, конечно, новые, это ага... Ну ладно.

Сразу глупый вопрос.
Заценив такой рулезный софт, как Regedit, можно отметить, что оный работает как в винде, имея графическую оболочку), так и в досе (с консоли, откуда же ещё :) ). Спрашивается, какова концепция реализации такой фишечки? То есть чтобы софт и там пахал, и там. Ну вы поняли :wink:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение alibek » 24.04.2003 (Чт) 9:04

Разве он работает под DOS? А консоль это совсем не DOS.
А что касается того, что можно использовать "regedit c:\myconfig.reg", то это просто обработка параметров командной строки, в VB эти параметры возвращает функция Command$().
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение GSerg » 25.04.2003 (Пт) 15:38

Интересно, интересно...
А как же вижуаловскую прогу запустить под досом? Она же тебя пошлёт с формулировкой "This program cannot be run in DOS mode". А Regedit работает. Так вот как же он работает? В нём же визуальная часть есть. Он определяет, что запущен под досом, и визуальную часть не грузит.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение alibek » 25.04.2003 (Пт) 15:48

А, понял. Ты имеешь ввиду Win9x? Что часть виндовых утилит умеют работать и под DOS? На VB ты такого не сделаешь, это точно.
Просто любая программа (в том числе и виндовая) ЗАПУСКАЕТСЯ под DOS. Но в виндовых программах при запуске проверяется среда, и если прога запущена не под Windows, то выдается сообщение (не могу, мол, работать под DOS) и завершение работы. Но никто не запрещает тебе вместо этого обработчика засунуть полноценный DOS-вариант этой программы. Т.е. при запуске под DOS управление передается DOS-варианту программы, а под Windows запустится виндовый вариант.
Lasciate ogni speranza, voi ch'entrate.

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 25.04.2003 (Пт) 18:58

alibek писал(а):А, понял. Ты имеешь ввиду Win9x? Что часть виндовых утилит умеют работать и под DOS? На VB ты такого не сделаешь, это точно.
Просто любая программа (в том числе и виндовая) ЗАПУСКАЕТСЯ под DOS. Но в виндовых программах при запуске проверяется среда, и если прога запущена не под Windows, то выдается сообщение (не могу, мол, работать под DOS) и завершение работы. Но никто не запрещает тебе вместо этого обработчика засунуть полноценный DOS-вариант этой программы. Т.е. при запуске под DOS управление передается DOS-варианту программы, а под Windows запустится виндовый вариант.


Для программ на VB это сообщение выглядет так:
This program cannot be run in DOS mod

Но некоторые, я видел, правда не на VB делали другие сообщения.

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 25.04.2003 (Пт) 20:37

тож такой вопрос возникал когда-то...

или как, например, объяснить, каким образом отображаются контролы (кнопки, текстбоксы и т.п.) при установке виндовса (всё-равно что и разрешение не крутое, и цветов не много, но всё же... типа работа из доса)? :roll: как такое зарулить на ВБ?
думаю это чё-то связано не только с досом... возможно при перед установкой (на примере с установкой винды) копируются какие-то фалы для корректной работы, но... даже не знаю... но интересно :lol:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 25.04.2003 (Пт) 22:50

2Firestorm: а ведь win3.11 был всего лишь надстройкой для dos'a и там если мне не изменяет память были всякие контролы. К томуже свои контролы написать не представляет труда, тем боле для такой компании как microsoft и потом встроить это дело в setup.
2GoGosha: по мойму можно просто поменять данную строку в exe файле и написать там ТАКОЕ :oops: :P :twisted:
Ничто так не ограничивает полёт мысли программиста, как компилятор

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 26.04.2003 (Сб) 0:57

В С++ имеется возвожность создания консольных приложений, наверное и 16(8)-битных, которые могут работать в DOS-режиме. Отличительные особенность VB от С++:
1. Написан на С++
2. Рассчитан на работу с базами данных типа .MDB
3. Использует библиотеки MSVBVM50.DLL или MSVBVM60.DLL, которые, в свою очередь опираются на системные библиотеки Windows.

Вывод: написать на VB (имеется ввиду VB для Win) консольное приложение - мартышкин труд.

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 26.04.2003 (Сб) 8:37

2corgi:
так скока не парился, но 16 битный код у меня не работал в досе... не знаю даже как еще... :roll:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 26.04.2003 (Сб) 11:44

2Firestorm: следует различать дос режим, что подрузамевает под собой консольное приложение и чистый дос так как это две баальшие разницы
Ничто так не ограничивает полёт мысли программиста, как компилятор

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 28.04.2003 (Пн) 20:46

corgi писал(а):2Firestorm: следует различать дос режим, что подрузамевает под собой консольное приложение и чистый дос так как это две баальшие разницы

:twisted:
ну есть консольки как у дельфы (или borlad cpp), которые не могут работать в досе, но есть и консольки от древних (сравнительно друвних :roll: типа asic или qbasic) компиляторов, которые спокойно работают в досе... :lol:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

ShadowCaster
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 24.05.2002 (Пт) 10:52

...

Сообщение ShadowCaster » 29.04.2003 (Вт) 22:23

Есть 2 типа ЕХЕ-шников:
1) NewEXE - это виндовские GUI-приложения и консольные (которые только внешне похожи на DOS'овские!).
2) EXE - ДОСовские приложения (DLL и подобными весчами там и не пахнет!)

Так этот пресловутый Regedit.exe запускается как NewEXE консольное приложение, т.е. в "чистом" ДОСе он точняк не запустится

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

Сообщение alibek » 30.04.2003 (Ср) 8:15

ShadowCaster, совершенно верно :)
Я только добавлю, что в NewExe можно встроить фрагмент, который будет работать под чистым DOS'ом. Примером такой программы может послужить файл Setup.exe из дистрибутива Win9x :)
Lasciate ogni speranza, voi ch'entrate.

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 30.04.2003 (Ср) 11:28

Консольные приложения делать можно:

Как подключить консольное окно к приложению Visual Basic
Эта статья демонстрирует подключение консольного окна к приложению Visual Basic, из которого можно записывать в это консольное окно и запускать другие приложения в этом консольном окне.



Пример по шагам
Воспользуйтесь Блокнотом (Notepad) для создания следующего bat-файла:

DIR /W

и сохраните его как C:\TEST.BAT


В Visual Basic создайте новый проект с формой и модулем.


Занесите в модуль следующие объявления API функций:

Option Explicit

Declare Function AllocConsole Lib "kernel32" () As Long
Declare Function FreeConsole Lib "kernel32" () As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) _
As Long
Declare Function GetStdHandle Lib "kernel32" (ByVal _
nStdHandle As Long) As Long
Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" _
(ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal _
nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, _
lpReserved As Any) As Long

Public Const STD_OUTPUT_HANDLE = -11&





Добавьте на форму кнопку и введите следующий код:

Dim hConsole As Long

Private Sub Command1_Click()
Dim Result As Long, sOut As String, cWritten As Long
sOut = "Hi There" & vbCrLf
Result = WriteConsole(hConsole, ByVal sOut, Len(sOut), cWritten, _
ByVal 0&)
Shell "C:\TEST.BAT"
End Sub

Private Sub Form_Load()
If AllocConsole() Then
hConsole = GetStdHandle(STD_OUTPUT_HANDLE)
If hConsole = 0 Then MsgBox "Couldn't allocate STDOUT"
Else
MsgBox "Couldn't allocate console"
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
CloseHandle hConsole
FreeConsole
End Sub





Запустите приложение. Появится пустое окно консоли.


Кликните по кнопке. В консоле должны появиться текст в sOut и вывод из bat-файла.


Закройте форму. Окно консоли должно завершиться.

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 30.04.2003 (Ср) 12:42

2GoGosha
и чё это? :evil: такой пример у меня где-то на харде валяется... :lol:

лучшеб показали пример, как в досе запустить всё барахло с контролами (типа как установка винды из доса)... :roll:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 30.04.2003 (Ср) 12:47

Firestorm писал(а):2GoGosha
и чё это? :evil: такой пример у меня где-то на харде валяется... :lol:

лучшеб показали пример, как в досе запустить всё барахло с контролами (типа как установка винды из доса)... :roll:



Открываешь Qbasic и ...

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

Сообщение alibek » 30.04.2003 (Ср) 13:36

Firestorm, ты хоть сообщения читаешь? Если хочешь визуальные контролы, то делаешь их сам, ручками.
И при установке винды эти контролы не из воздуха беруться. Вначале запускается DOSовская часть, которая устанавливает MiniWin (который берется из mini.cab), и который по сути является Windows 3.11 + Win32s и дальше управление передается в этот MiniWin.
Lasciate ogni speranza, voi ch'entrate.

Санёк
Бывалый
Бывалый
 
Сообщения: 233
Зарегистрирован: 08.12.2001 (Сб) 19:42
Откуда: Russia

Сообщение Санёк » 03.05.2003 (Сб) 0:10

Ни одна прога под Windows не пойдёт под DOS. В том числе и консольная.

Просто в PE формате есть две проги. Одна под DOS, другая под Windows. Загрузчик Windows определяет, что формат PE и загружает соответствующую прогу. DOS вообще не знает о существовании Windows проги. Для него PE - это обычная прога под DOS, он её и запускает. Теоретически можно засунуть в PE работоспособную прогу под DOS, только не знаю чем. (Руками же EXE править не будешь). Хотя, наверное есть проги для этого. Только эту прогу нельзя писать ни на VB, ни на Delphi, ни на VC. Можно на Basic, pascal, C и т. д.

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 03.05.2003 (Сб) 11:11

2alibek
читаю... вот и вопрос как такое самомоу сделать... :roll:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

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

Сообщение alibek » 03.05.2003 (Сб) 11:27

Firestorm, Санёк и написал, как. Пишешь на (например) Borland Pascal, в нем есть почти визуальная оболочка. Потом полученную прогу встраиваешь в заголовок твоего виндового exe-файла.
Lasciate ogni speranza, voi ch'entrate.


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 100

    TopList