|
Скачати 63.45 Kb.
|
Файл *.cpp містить вихідний код DLL з реалізацією всіх його функцій, а також локальні функції, що забезпечують виконання DLL (вікно Visual С++: File>New вводить ім'я файлу та код з розширенням .срр). Файл заголовків *.h містить прототипи всіх функцій DLL, локальних функцій та інших компонентів, наприклад, структур та вказівок на них, глобальні змінні, які використовуються при виконання DLL (вікно Visual С++: File>New вводить ім'я файлу і код з розширенням .h). Ці файли обов'язково будуть присутні, якщо необхідно мати доступ до програм із С/С++. Вони включаються до складу викликаючих програм, які отримують в своє розпорядження прототипи всіх функцій DLL. Файли визначень DEF експортують функції DLL, реалізовані у вихідних файлах (через вікно Visual С++: FileNew вводиться ім'я файлу і код з розширенням .def). Без файлу визначень незалежні програми не можуть звертатися до функцій DLL. При наявності файлу DEF можна просто ідентифікувати будь-яку функцію, створену на С або Visual С++. Деякі викликаючі програми, розроблені на С/С++ можуть обійтися без файлів DEF, вони самостійно знаходять потрібні функції DLL. Бібліотечні файли LIB надають викликаючій програмі шлях, де розташований файл DLL і інформація файлу LIB, використовується при компіляції викликаючої програми. Без цього файлу компілятор не зможе розпізнати функції DLL. Якщо викликаюча програма написана на С/С++, цей файл повинен бути включений до неї і пов'язаний з нею при редагуванні зв'язків. Файл DLL є кінцевим продуктом у створеної динамічної бібліотеки. Подібно до виконуваного файлу, файл DLL містить машинні коди, але він не може бути запущений сам по собі. Для виклику функцій потрібна відповідна програма. Якщо файл DLL розміщений в каталозі, в якому система здійснює пошук файлів, то комп'ютер автоматично знайде його і зв'яже з викликаючою програмою. Користувач може створити свій спеціальний каталог для зберігання своїх DLL та обов'язково оголосити його для автоматичного пошуку. 1.1 Створення проекту в середовищі Visual C++ Формування динамічної бібліотеки виконується за наступними шляхами технології:
– глобальні змінні, які будуть використовуватися DLL; – макрос DllExport __declspec (dllexport ), що представляє стандартний вираз експортування для повідомлення компілятору про експортовані нижче функції; – функції DLL, які будуть використовуватися в даному проекті. Наприклад: DllExport int CALLBACK randCalc(int size, double rdataArray[]); DllExport Result CALLBACK randResult().
Виконуються наступні технологічні дії:
Функція не повертає ніякого значення: Private Declare Sub <�ім`я_функції_DLL> Lib “<�ім`я_бібліотеки_DLL>” [Alias “<�псевдонім>” ] (<�параметри> ) Функція повертає значення: Private Declare Function <�ім`я_функції_DLL> Lib “<�ім`я_бібліотеки_DLL>” [Alias “<�псевдонім>” ] ( [ByVal] var1 As type, [ByVal] var2 As type, ….) As type
2 ПРАКТИЧНІ ПРИКЛАДИ ДЛЯ СЕРЕДОВИЩ VISUAL BASIC, VISUAL С++За основу взятий приклад створення псевдо випадкової послідовності та розрахунку максимального, мінімального та середнього значень цієї послідовності. Вхідними параметрами будуть значення амплітуди, як множника при генерації псевдо випадкової послідовності та число, яке визначає кількість елементів псевдо випадкової послідовності. Вихідними даними будуть максимальне, мінімальне та середнє значення цієї послідовності. Приклад генерації псевдо випадкої послідовності, який ілюструє можливості взаємодії програм на Visual Basic та Visual С++. Програма у Visual Basic розрахунку псевдо випадкових чисел /************************************** * Файл : VBSimple.frm (фрагмент) * Дата : 20/11/2010 ***********************************/ Option Explicit Dim dArray() As Double, num As Long Private Type Result max As Double min As Double mean As Double End Type Private Declare Function randCalc Lib "VBSimple.dll" (ByVal size As Long, dArray As Double) As Long Private Declare Function randResult Lib "VBSimple.dll" () As Result Private Sub cmdCalc_Click() Dim ret As Long, retValues As Result ret = randCalc(num - 1, dArray(0)) If ret <> 0 Then MsgBox "Error in randCalc DLL function ", vbOKOnly, "DLL Calling" Exit Sub End If retValues = randResult() txtMax.Text = retValues.max txtMin.Text = retValues.min txtMean.Text = retValues.mean End Sub Private Sub cmdCreate_Click() Dim n As Integer, amp As Integer num = Val(txtNum.Text) amp = Val(txtAmp.Text) If amp <= 0 Then MsgBox "Invalid Amplitude Value ", vbOKOnly, "User Input" Exit Sub End If If num >= 5000 Or num <= 0 Then MsgBox "Invalid Number (0 < number < 5000)", vbOKOnly, "User Input" Exit Sub End If ReDim dArray(num) For n = 0 To num dArray(n) = (amp + 1) * Rnd Next n End Sub Private Sub cmdExit_Click() End End Sub Дана програма створює набір псевдо випадкових значень, який передається у масив методу, реалізованому в середовищі Visual C++, який обчислює максимальне, мінімальне та середнє значення з заданої послідовності. Результати обчислень у вигляді структури повертається у середовище Visual Basic. Програма у мові Visual C++ /************************************** * Файл : VBSimple.h * Заголовочний файл для VBSimple.cpp * Дата : 20/11/2010 **************************************/ #ifndef VBSIMPLE_H_ #define MaxNum 5000 double darray[MaxNum]; double m_max; double m_min; double m_mean = 0; typedef struct { double max; double min; double mean; }Result; double convert(double input); /*-----------------------------------------------------*/ #define DllExport __declspec( dllexport ) /*-----------------------------------------------------*/ DllExport int CALLBACK randCalc(int size, double rdataArray[]); DllExport Result CALLBACK randResult(); #endif/************************************** * Файл : VBSimple.cpp * DLL файл розрахунку, визваний із Visual Basic. * Дата : 20/11/2010 **************************************/ #include #include #include #include #include #include #include "VBSimple.h" using namespace std; Result cResult; DllExport int CALLBACK randCalc(int size, double rdataArray[]) { int i; m_max = rdataArray[0]; m_min = m_max; for (i = 0; i < size; i++) { if (m_max < rdataArray[i]) m_max = rdataArray[i]; if (m_min > rdataArray[i]) m_min = rdataArray[i]; m_mean = m_mean + rdataArray[i]; } m_mean = m_mean/size; return 0; } Посередник між програмами Visual Basic і Visual C++ перетворює їх дані DllExport Result CALLBACK randResult() { cResult.max = convert(m_max); cResult.min = convert(m_min); cResult.mean = convert(m_mean); return cResult; } double convert(double input) { char buf[128]; sprintf(buf, "%.3f", input); return atof(buf); } /************************************** * Файл: VBSimple.def * Файл визначень * Дата : 20/11/2010 **************************************/ LIBRARY VBSimple.dll EXPORTS randCalc randResult Інтерфейс користувача для завдання даних цим програмам реалізований засобами Visual Basic наведений на рис. 1. Рис.1. Інтерфейс користувача на мові Visual Basic Амплітуда - поле призначене для введення амплітуди, яка використовується як множник при генерації псевдо випадкової послідовності. Число – поле, призначене для введення значення числа про кількість елементів псевдо випадкової послідовності; Максимум – поле для виведення максимального значення псевдо випадкової послідовності; Мінімум – поле для виведення мінімального значення псевдо випадкової послідовності; Середнє – поле для виведення середнього значення псевдо випадкової послідовності; Створюється – кнопка для ініціалізації процесу Private Sub cmdCreate_Click() для створення псевдо випадкової послідовності у вигляді масиву dArray() As Double. При розрахуванні використовується кнопка ініціалізації процесу Private Sub cmdCalc_Click(), що визиває функції randCalc і randResult, реалізовані на С++ у файлі VBSimple.cpp для обчислення максимального, мінімального та середнього значень псевдо випадкової послідовності та повернення результатів обчислень відповідно. Вихід – кнопка ініціалізації процесу Private Sub cmdExit_Click() з завершення програми. |
Уроку Тема: Реалізація алгоритмів з послідовним розгалуженням у вигляді програм (проектів) Мета: Навчитись реалізувати алгоритми розгалуження у вигляді програм (проектів) в середовищі програмування Visual Basic; розвинути... |
Дата: 22. 11. 12 «Логічні вирази та логічні операції» Мета Актуалізація та корекція опорних знань Які типи даних що використовуються в Visual Basic ви знаєте? |
Уроку Тема: Розв’язування задач ... |
Тема: Побудова алгоритмів з послідовним розгалуженням Умовний оператор використовується для подання розгалуженого обчислювального процесу у коді програми мовою Visual Basic. Умовний оператор... |
Уроку Тема: Таблиці істинності Мета: навчальна: Сформувати основні поняття про таблиці істинності. Навчити учнів використовувати логічні вирази та логічні операції... |
Створення локальних Windows-застосунків Виберіть з головного меню File|New|Project і шаблон проекту Windows Forms Application. Буде створена форма з іменем Form1 – головне... |
Програма курсу програмування на мов і С++ Курс націлений на отримання знань і практичних навиків програмування на мовах C і C + + в рамках процедурно-орієнтованого програмування.... |
8 клас Тема: Х Мета: Розглянути хімічні властивості кислот: взаємодія кислот з оксидами металів, взаємодія кислот з солями. Формувати навички складення... |
Ігор Гирич Взаємодія між середньою школою та музеями під час вивчення... На сьогодні ще недостатньо налагоджене співробітництво середньої школи з музеями України при вивченні відповідних тематичних програм,... |
Створення консольних програм Консольна програма не має інтерфейсу користувача. Такі програми використовуються для розробки системних програм, автоматизованих... |