Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


—татическа€ загрузка




—оздадим сперва проект (File / New / DLL). Ѕудет создан проект, содержащий следующее:

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) { return 1; }

и длинный коментарий предупреждающий вас о том, что дл€ работо способности вашей DLL необходимо снеи обеспечить поствку некоторых dll если вы используете экземпл€ры класса String.

ƒл€ экспорта и импорта из DLL необходимо использовать моди фикаторы __export и __import соответсвенно. Ќо в C++ Builder можно использовать новое ключевое слово __delspec() с параметрами dllexport и dllimport соответсвенно. —ами понимаете, что дл€ того чтобы эспортировать функции из библиотеки еужен один заголовочный файл с описани€ми _delspec(dllexport) дл€ экспортируемых функций, дл€ импорта функций в приложение вам необходимо будет поставить анологичный заголовочный файл но с _delspec(dllimport) описани€ми, что достаточно неудобно. Ёта проблема решаетс€ легко: добавте в заголовочный файл библиотеки следующее:

#if defined(BUILD_DLL)# define DLL_EXP __declspec(dllexport)#else# if defined(BUILD_APP)# define DLL_EXP __declspec(dllimport)# else# define DLL_EXP# endif#endif

в исходном файле DLL напишите #define BUILD_DLL, а вместо __declspec(dllexport) пишите DLL_EXP. ѕри написании программы добавте строчку #define BUILD_APP, и просто подключите заголовочный файл DLL.

ѕример DLL: файл P.cpp

//---------------------------------------------------------------------------#define BUILD_DLL#include #include "p.h"#pragma hdrstop //---------------------------------------------------------------------------// Important note about DLL memory management when your DLL uses the// static version of the RunTime Library://// If your DLL exports any functions that pass String objects (or structs/// classes containing nested Strings) as parameter or function results,// you will need to add the library MEMMGR.LIB to both the DLL project and// any other projects that use the DLL. You will also need to use MEMMGR.LIB// if any other projects which use the DLL will be perfomring new or delete// operations on any non-TObject-derived classes which are exported from the// DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling// EXE's to use the BORLNDMM.DLL as their memory manager. In these cases,// the file BORLNDMM.DLL should be deployed along with your DLL.// To avoid using BORLNDMM.DLL, pass string information using "char *" or// ShortString parameters.//// If your DLL uses the dynamic version of the RTL, you do not need to// explicitly add MEMMGR.LIB as this will be done implicitly for you//-------------------------------------------------------------------------int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) { return 1; } //------------------------------------------------------------------------- void Message(char *s) { i=10; Application->MessageBox(s,"From DLL",IDOK); }

‘айл P.h

#if defined(BUILD_DLL)# define DLL_EXP __declspec(dllexport)#else# if defined(BUILD_APP)# define DLL_EXP __declspec(dllimport)# else# define DLL_EXP# endif#endif DLL_EXP void Message(char *s);DLL_EXP int i;

—компилируйте проект.

≈сли вы нажмете Run то после завершенни€ построени€ будет выдано сообщение что данна€ программа не можнт быть исполнена (естественно). “еперь напишем вызывающую программу. ¬томже каталоге создайде новый проект (File / New Application) в форму поместите одну кнопку и создай обработчик событи€ OnClick. ¬аш исполн€емый файл должен представл€ть собой слдующее:

//---------------------------------------------------------------------------#include #define BUILD_APP#pragma hdrstop#include "p.h"#include "Unit1.h"#include //---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//-------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) { } //-------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { char c[10]; Message("roma"); for(; i>0;i--) { sprintf(c,"Example %d",i); Application->MessageBox("Example of using DLL variable",(char*)c,IDOK); }} //-------------------------------------------------------------------------

Ќе забудьте об объ€влени€х в начале файла. «айдите в менеджер проектов.“ам откройте свой проект и добавте.lib файл из предыдушего проект с DLL(правый клик, пункт ADD). «апустите проект.

 ак видите, дл€ того, чтобы вашу DLL можно было использовать необходимо три файла: сама DLL, заголовочный файл и библиотечный файл.lib.





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-10-01; ћы поможем в написании ваших работ!; просмотров: 387 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

Ќеосмысленна€ жизнь не стоит того, чтобы жить. © —ократ
==> читать все изречени€...

1356 - | 1182 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.008 с.