Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы

.docx
Скачиваний:
21
Добавлен:
12.03.2016
Размер:
36.46 Кб
Скачать

Операционные системы

Шацков Владимир Валентинович

Операционные системы и сети. Обычно читают на 3м курсе, но его сместили, т.к. он является связующим звеном между Архитектурой ЭВМ и программированием.

№1 Лекция 07.09.15

На практике

Прикладная программа во время своего выполнения часто требует некоторые сервисы от ОС (закрыть, открыть окно, создать /изменить файл, вернуть получить кусок из динамической памяти ит.д.) которые осуществляются с помощью системных вызовов, осуществляемой с помощью Win32 API (Application Program Interface – библиотека модулей, обеспечивающая основной сервис, предоставляемый программе), реализован в нескольких dll (kernel 32.dll, user32.dll) (dynamic link library, static link library).

Для тех, кто это не знает, описываются этапы создания exe файла.

Обычно программа описывается на некотором формализованном языке программирования, являющегося набором символов, который не может быть выполнен на компьютере sub a Dim a as integer a = a+1 end sub Команды для компьютера можно представить следующим образом. Затем их обрабатывает процессор.

Чтобы получить из исходного кода машинный, нужно использовать транслятор, который берет команды и преобразует их в объектный код (это коды команд, но непосредственно его выполнить нельзя – есть ссылки подпрограммы, которые выполнить нельзя, например b=sin(a), которого нет). Модули dll подключаются на этапе комплияции программы.

Если какой-то программе требуется dll, она загружается в память. Когда она потребуется еще одной программе, она по прежнему там остается. Когда она никому не нужна, она убирается из памяти.

Мы будем пользоваться dll kernel32.dll предоставляющей сервис win32 api прикладным программам.

PE-файлы Portable Executable. У них достаточно сложная структура, они бывают разных типов.

Сегодня мы воспользуемся классической библиотекой dll shell32.dll

Еще есть activeX dll, net dll

Как бы там не было, exe и dll имеют общую структуру, и отличаются, фактически, одним битом.

Сначала идут заголовки, Затем секция экспорта (те модули, которые dll предоставляет другим программам) Секция импорта Секции

Транслятор комплиятора берет код и переводит в объектный код всю программу сразу.

Транслятор интерпретатора берет каждую строчку кода, выполняет ее и выводит результат.

Shell – команда VBA, которая запускает файл

Не нужно указывать полный путь, т.к. калькулятор указан в переменные окружения

Private Sub CBOK_Click()

Shell TextBox1.Text

End Sub

Private Sub CBOpen_Click()

Dim Fd As FileDialog

Set Fd = Application.FileDialog(msoFileDialogOpen)

Fd.Filters.Clear

Fd.Filters.Add "Exe-файлы", "*.exe"

Fd.Filters.Add "Все файлы", "*.*"

Fd.Show

If Fd.SelectedItems.Count > 0 Then

TextBox1.Text = Fd.SelectedItems(1)

End If

End Sub

Для того чтобы открывать не exe файлы, а ассоциированные с ними документы, таблицы, ит.д. воспользуем ShellExecuteA

В модуль добавим Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As LongPtr, ByVal ep1 As String, ByVal epF As String, ByVal epP As String, ByVal epD As String, ByVal nS As Long) As Long

Private Sub CBOK_Click()

ShellExecute 0, "", TextBox1.Text, "", "", 1

End Sub

Private Sub CBOpen_Click()

Dim Fd As FileDialog

Set Fd = Application.FileDialog(msoFileDialogOpen)

Fd.Filters.Clear

Fd.Filters.Add "Exe-файлы", "*.exe"

Fd.Filters.Add "Все файлы", "*.*"

Fd.Filters.Add "Word", "*.doc*"

Fd.Filters.Add "PDF", "*.pdf"

Fd.Show

If Fd.SelectedItems.Count > 0 Then

TextBox1.Text = Fd.SelectedItems(1)

CBOK_Click

End If

End Sub

Visual Basic – один из немногих языков, где значения в функцию передаются по ссылке.

Рассмотрим пример.

Sub proceed1(b As Integer)

b = b + 1

End Sub

Sub test()

Dim x As Integer

x = 3

proceed1 x

Debug.Print "x=", x ‘Получим 4

End Sub

В окне View->Immadate View мы увидем 4, если перед b допишем byval, то получим 3.

Смысл: существует 2 типа переменных, по значению, и по ссылке.

Если переменная передается по значению, то при изменении ее в функции, в вызывающем модуле она не изменится. Если по ссылке, то изменится.

ЗАЧЕТ ЭКЗАМЕН… Неизвестно