Створення DLL в CBuilder

Для того щоб використовувати код в DLL, нам спочатку потрібно створити DLL, що містить код, вірно Вірно Давайте створимо такого звіра в CBuilder Далі ми досліджуємо використання DLL, створеної в CBuilder, в іншій системі, однак зараз ми збираємося завантажувати цю DLL в CBuilder

Одне невелике зауваження Насправді є два різні способи використовувати функції в DLL, створеної в CBuilder Перший – це створення бібліотеки імпорту утилітою implib, яка поставляється разом з CBuilder Потім бібліотека імпорту може бути безпосередньо вбудована в додаток, і Windows автоматично завантажить вашу DLL під час виконання Запамятайте, що вам потрібно використовувати програму implib, що поставляється з CBuilder, а не більш давню версію з іншої системи, так як бібліотеки CBuilder мають інший формат, ніж старі бібліотеки, і тому потрібні свіжі програми для генерації цих бібліотек з DLL Коли у вас є бібліотека імпорту для вашої DLL, ви можете просто описати прототипи функцій, які вам потрібні, і використовувати їх безпосередньо, як ніби вони були описані у вашому додатку У нашому прикладі ми більш зацікавлені в механізмі динамічного завантаження, так що ми все зробимо самі

У цьому прикладі ми створимо DLL в іншому середовищі розробки, в даному випадку – в Visual C + + Я вибрав цю середу частково тому, що я добре знаю Visual C + +, але в основному тому, що ви швидше будете використовувати DLL з інших джерел (так звані third-party), ніж створені в CBuilder У будь-якому випадку нам потрібно робити одне і те ж, так чому б не показати вам ще дещо

На відміну від CBuilder середу Visual C + + (VC) не хоче сама створювати для вас DLL Замість цього вона створить файл збірки (makefile) і залишить його порожнім, без вихідних файлів Як мені здається, це ще одна вагома причина для переходу на CBuilder У будь-якому випадку створіть в Visual C + + новий файл і додайте в нього наступний код Якщо у вас немає Visual C + + або вам ліньки завантажувати цю середу розробки і набирати весь цей код, ви можете знайти дану DLL разом з кодом прикладу на супровідному компакт-диску

#include &ltwindowsh&gt

#include &ltstdlibh&gt

#include &ltstringh&gt

#include &ltstdioh&gt

BOOL WINAPI DllEntryPoint (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {

BOOL fSuccess = TRUE switch (fdwReason) {

case  DLL_PROCESS_ATTACH: case  DLL_THREAD_ATTACH:

break

case  DLL_PROCESS_DETACH: case  DLL_THREAD_DETACH:

break

}

return (fSuccess)

}

extern &quotC&quot

{

__declspec( dllexport ) int CalFunction1( void )

{

MessageBox(NULL, &quotYou called function 1&quot, &quotInfo&quot, MB_OK) return 0

}

__declspec( dllexport ) int CallFunction2( const char *str )

{

MessageBox(NULL, &quotYou called function 2&quot, str, MB_OK) return 0

}

__declspec( dllexport ) void CallFunction3( int nValue )

{

char szBuffer[20] sprintf(szBuffer, &quot%d&quot, nValue)

MessageBox(NULL, szBuffer, &quotValue&quot, MB_OK)

}

}

Важливим у цьому коді є три функції Поки що ви можете ігнорувати смішно виглядають модифікатори declspec (dllexport) Це просто спосіб пояснити VC, що ці функції повинні бути експортованими в DLL, щоб інші програми могли їх використовувати Може бути, ви думали, що функції експортуються за умовчанням в такому випадку багато в світі програмування під Windows є не таким, яким воно вам здавалося

У DLL визначено три функції: CallFunction1, CallFunction2 і CallFunction3 Вони відрізняються типом повернення, а також кількістю і типами аргументів Ми будемо використовувати всі три функції в нашому прикладі

Як ви помітили, функції оголошені з модифікатором extern «C» в попередньому лістингу Visual C + + і CBuilder використовують різні схеми зміни імені (mangling) при генерації імен для функцій Щоб не дивитися в лістинг експорту і запамятовувати отримані імена функцій в переробленому вигляді, ми дозволяємо компілятору використовувати угоду про виклики, а також схему зовнішніх імен, прийняті в C Це означає, що в результаті імена функцій в експортному вигляді будуть просто CallFunction1 і т д

Коли ми визначили DLL, наступним кроком є ​​створення проекту в CBuilder, що використовує функції, які ми написали і експортували з DLL Ви повинні знати, що тільки експортовані функції можуть бути динамічно завантажені з DLL під час виконання чи вбудовані в ваш додаток через бібліотеку імпорту Неекспортірованние функції невидимі для навколишнього світу і можуть бути використані тільки іншими функціями в цій DLL Ми використовуємо цю можливість нижче в книзі, коли будемо розглядати іншу частину рівняння: використання DLL, створених у CBuilder, в системі Visual C + +

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*