FreeLibrary(dllp);
}
//---------------------------------------------------------------------------
запустите это проект, при нажатии на кнопку должно выдаватся сообшение. Теперь разберемся, как это работает.
void (__stdcall *Message)(char *s);-объявление указателя на функцию.
HINSTANCE dllp = LoadLibrary("p.dll");- загрузка библиотеки в память.
Message= (void(__stdcall *) (char*)) GetProcAddress(dllp, "_Message"); присвоение указателю адреса функции DLL.
Message("Hi From Dinamic DLL"); рабочий вызов фунциий (собственно то для чего все это и делается).
FreeLibrary(dllp);- выгрузка библиотеки из памяти.
Обратите внимание на то, что призагрузке можно указать точное местоположние библиотеки (необезательно в том же каталоге где и приложение).
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <Grids.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TStringGrid *StringGrid1;
TBitBtn *Populate;
TBitBtn *SpitToForm2;
TBitBtn *PrintMe;
TPrintDialog *PrintDialog1;
void __fastcall PopulateClick(TObject *Sender);
void __fastcall SpitToForm2Click(TObject *Sender);
void __fastcall PrintMeClick(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published: // IDE-managed Components
TRichEdit *RichEdit1;
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif
//Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#include "vclprinters.hpp"
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PopulateClick(TObject *Sender)
{
int rangeRow1 = StringGrid1->RowCount;
int startRow1 = StringGrid1->FixedRows;
for(; startRow1 <rangeRow1; startRow1++) { int rangeCol1="StringGrid1-">ColCount;
int startCol1 = StringGrid1->FixedCols;
for(; startCol1 <rangeCol1; startCol1++) { String foo="rec" + IntToStr(startRow1 ) + "-" + IntToStr(startCol1); StringGrid1->Cells[startCol1][startRow1] = foo;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpitToForm2Click(TObject *Sender)
{
Form2->Show();
int rangeRow2 = StringGrid1->RowCount;
int startRow2 = StringGrid1->FixedRows;
for(;startRow2 <= rangeRow2; startRow2++) { int rangeCol2="StringGrid1-">ColCount;
int startCol2 = StringGrid1->FixedCols;
String bar = "";
for(;startCol2 <= rangeCol2; startCol2++) { String poof ; poof +="StringGrid1-">Cells[startCol2][startRow2];
for(int f = 0;f<(10 StringGrid1->Cells[startCol2][startRow2].Length());f++)
poof = poof + " ";
bar += poof;
}
Form2->RichEdit1->Lines->Add(bar);
}
Form1->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PrintMeClick(TObject *Sender)
{
if(PrintDialog1->Execute())
{
TPrinter * thePrinter = Printer();
thePrinter->BeginDoc();
//ShowMessage(IntToStr(thePrinter->PageWidth));
int i, x;
String S("String Grid Printout");
thePrinter->Canvas->Font->Name = "FixedSys";
thePrinter->Canvas->Font->Size = 8;
thePrinter->Canvas->Font->Pitch = TFontPitch() << fpFixed; thePrinter->Canvas->Font->PixelsPerInch = 400;
x = thePrinter->Canvas->TextHeight(S);
for(i = 0; i <Form2->RichEdit1->Lines->Count; i++)
{
if ((i%(thePrinter->PageHeight/x))== 0)
{
if(i!=0)
thePrinter->NewPage();
}
S = Form2->RichEdit1->Lines->Strings[i];
thePrinter->Canvas->TextOut(1, (x* (i%(thePrinter->PageHeight/x)))+x, S);
}
thePrinter->EndDoc();
}
}
//---------------------------------------------------------------------------