Взаємодія програм в Visual Basic і Visual C++


Скачати 63.45 Kb.
НазваВзаємодія програм в Visual Basic і Visual C++
Дата17.05.2013
Розмір63.45 Kb.
ТипДокументи
bibl.com.ua > Інформатика > Документи

  1. Взаємодія програм в Visual Basic і Visual C++




Тут демонструється приклад реалізації взаємодії програм в Visual Basic і C++ з урахуванням технології І.Бея, реалізованої за допомогою інтерфейсного посередника, як проміжного ланцюга між ними з передачі і перетворення сумісних, але не релевантних типів даних.

Шляхи технології забезпечення взаємодії названих програм наступні:

- розроблення DLL в середовищі Visual С++;

- опис прототипів функцій DLL у Visual Basic;

- опис функцій DLL з реалізацією їх відображення в домені Visual Basic.

Функції DLL подаються такими типами файлів: *.cpp, *.h, DEF, LIB.




Файл *.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++
Формування динамічної бібліотеки виконується за наступними шляхами технології:

  1. Завантаження Visual C++ 6.0.

  2. Створення нового проекту - FileNew <ім’я проекту > (наприклад, VBSimple).

  3. Побудова файлу заголовка (наприклад, VBSimple.h), в якому подаютьс:

– глобальні змінні, які будуть використовуватися DLL;

– макрос DllExport __declspec (dllexport ), що представляє стандартний вираз експортування для повідомлення компілятору про експортовані нижче функції;

– функції DLL, які будуть використовуватися в даному проекті. Наприклад:

DllExport int CALLBACK randCalc(int size, double rdataArray[]);

DllExport Result CALLBACK randResult().

  1. Включення файлу заголовка в склад проекту: ProjectAdd To ProjectsFile<ім’я файлу> (це файл VBSimple. h).

  2. Створення вихідного файл С++: FileNew <ім’я файлу> (наприклад, VBSimple.срр).

  3. Створення файлу визначень: FileNew <ім’я файлу> (наприклад, VBSimple.def) та включення його в склад проекту.

  4. Побудова файлу DLL: Build Build VBSimple.dll. Готовий файл DLL розміщується в каталозі Debug, який за умовчанням використовується для зберігання DLL, отриманих в результаті створення проекту або каталог Release в залежності від значення Active Configuration. При необхідності можна скопіювати DLL в інший каталог, який система переглядає при пошуку бібліотек (наприклад, C:\WINDOWS\SYSTEM).




    1. Побудова проекту у середовищі Visual Basic



Виконуються наступні технологічні дії:

  1. Завантаження Visual Basic 6.0.

  2. Створення форми File>Save Form1.frm As <ім'я форми> (наприклад, VBSimple.frm).

  3. Побудова проекту File>Save Project As <ім'я проекту.vbp> (наприклад, VBSimple.vbp).

  4. Відкриття вікна з кодом View Code. У списку Object натиснути пункт General і ввести всі об`явлені змінні та функції, що відносяться до рівня форми, які доступні всім процедурам обробки подій, визначених у формі. Для побудові відображення функцій DLL в середовищі Visual Basic необхідно обов'язково дати оголошення їх прототипів. Ці оголошення схожі на ті, що використовуються для виклику функцій Windows API DLL. Відмінність полягає тільки в імені бібліотеки, де треба вказати повний шлях до неї.

Функція не повертає ніякого значення:

Private Declare Sub <ім`я_функції_DLL> Lib “<ім`я_бібліотеки_DLL>” [Alias “<псевдонім>” ] (<параметри> )

Функція повертає значення:

Private Declare Function <ім`я_функції_DLL> Lib “<ім`я_бібліотеки_DLL>” [Alias “<псевдонім>” ] ( [ByVal] var1 As type, [ByVal] var2 As type, ….) As type

  1. Створення процедури обробки подій, що пов'язані з командними кнопками.

  2. Скомпілювання виконавчого файлу (наприклад, VBSimple.exe) і запуск його на виконання.

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 клас Тема: Х
Мета: Розглянути хімічні властивості кислот: взаємодія кислот з оксидами металів, взаємодія кислот з солями. Формувати навички складення...
Ігор Гирич Взаємодія між середньою школою та музеями під час вивчення...
На сьогодні ще недостатньо налагоджене співробітництво середньої школи з музеями України при вивченні відповідних тематичних програм,...
Створення консольних програм
Консольна програма не має інтерфейсу користувача. Такі програми використовуються для розробки системних програм, автоматизованих...
Додайте кнопку на своєму сайті:
Портал навчання


При копіюванні матеріалу обов'язкове зазначення активного посилання © 2013
звернутися до адміністрації
bibl.com.ua
Головна сторінка