Программа включения в DLL библиотеку функции Asc2Un
#include "EvryThng.h"
#define BUF_SIZE 256
_declspec (dllexport)
BOOL Asc2Un (LPCTSTR, LPCTSTR, BOOL);
BOOL Asc2Un (LPCTSTR fin, LPCTSTR fOut, BOOL bFaillfExists)
{
/* Функция копирования файла ASCII в Unicode на базе CopyFile. */
HANDLE hIn, hOut;
DWORD fdwOut, nIn, nOut, iCopy;
CHAR aBuffer [BUF_SIZE];
WCHAR uBuffer [BUF_SIZE];
BOOL WriteOK = TRUE;
hIn = CreateFile (fin, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
/* Определяем действие CreateFile, если выходной файл уже существует.*/
fdwOut = CREATE_NEW||CREATE_ALWAYS;
hOut = CreateFile (fOut, GENERIC_WRITE, 0, NULL,
fdwOut, FILE_ ATTRIBUTE_NORMAL, NULL);
while (ReadFile (hIn, aBuffer, BUF_SIZE, &nIn, NULL) && nIn > 0 && WriteOK)
{
for (iCopy = 0; iCopy < nIn; iCopy++)
/* Преобразование каждого символа. */
uBuffer [iCopy] = (WCHAR) aBuffer [iCopy];
WriteOK = WriteFile (hOut, uBuffer, 2 * nIn, &nOut, NULL); }
CloseHandle (hIn);
CloseHandle (hOut);
return WriteOK;
}
Перечень оборудования, аппаратного и программного обеспечения:
- персональный компьютер;
- программная среда Visual C++ .NET 2003.
Порядок выполнения работы:
1. Изучить основные способы создание динамических библиотек с неявным и явным связыванием.
2. Изучить процедуру экспорта и импорта функций в динамическую библиотеку при неявном связывании.
3. Изучить функции, которые используются при явном связывании: LoadLibrary, FreeLibrary и GetProcAddress.
4. Скопировать и отладить программу с использованием библиотеки с неявным связыванием.
5. Создать .DLL модуль для функции Asc2Un, листинг которой приведен ниже основной программы.
6. Разобраться с работой основной программы и объяснить ее функционирование.
7. Подготовить отчет по выполненной работе.
Порядок выполнения программ в среде Visual C++ .NET 2003:
1. Запустить Microsoft Visual Studio C++ /NET 2003.
2. Создать проект с именем Asc2Un формирования функции Asc2Un в динамическую библиотеку, используя вкладку MFC DLL. Для этого нужно в меню File выбрать New, затем Project и активировать иконку MFC DLL, в строке Name: набрать Asc2Un, в стоке Location: указать путь к папке, куда будет записан проект, и нажать кнопку Finish.
3. На экране должен появиться текст файла Asc2Un.cpp. Если его нет, то нужно войти в меню View и выбрать строку Solution Explorer и в папке Asc2Un найти файл Asc2Un.cpp.
4. Набрать программу функци Asc2Un и разместить в файле Asc2Un.cpp после #endif. Создать динамическую библиотеку .DLL. Для этого следует выбрать в менюProject, Properties вкладку C/C++, Code Generation. В окне Runtime Library выбрать Multithreaded Debug DLL.
5. Создать проект для консольного приложения Win32 Console Project для основной программы и набрать основную программу.
6. При создании .exe файла основной программы в меню Project, Properties открыть C/C++ выбрать Command Line и в окне Additional Options вписать H:\путь\...\Asc2Un.lib.
7. Перед запуском основной программы скопировать в папку Debug проекта консольного приложения файл Asc2Un.dll.
8. Запустить программу из командной строки, задавая имя файла, в котором находится исходный файл и далее имя файла, куда следует поместить преобразованный файл.
Контрольные вопросы:
1. Какие способы создания динамических библиотек существуют?
2. Опишите процесс неявного связывания функций в динамической библиотеке.
3. Как осуществляется процесс экспорта, импорта функций в динамическую библиотеку при неявном связывании?
4. Опишите функции, которые используются при явном связывании функций в библиотеке (LoadLibrary, FreeLibrary, GetProcAddress).
5. Как создается .DLL файл для функции Asc2Un?
6. Как в вызывающей программе импортируется функция из динамической библиотеки?
7. Поясните работу программы преобразования файла из кодировки ASCII в кодировку Unicode.
Содержание отчета:
1. Титульный лист.
2. Цель работы, перечень оборудования, аппаратного и программного обеспечения.
- Общие сведения о создании динамической библиотеки с неявным и явным связыванием.
- Описание механизма экспорта и импорта функций в библиотеку c использованием модификаторов _declspec (dllexport), _declspec (dllimport).
- Описание функций LoadLibrary, FreeLibrary и GetProcAddress.
- Листинг основной программы и функции преобразования файла Asc2Un и результаты преобразования файла.
7. Ответы на контрольные вопросы.
8. Выводы о проделанной работе.