Biblioteka dll dołączana jest statycznie do głównego programu.
Formularz w bibliotece dll powinien być wywoływany jako okno niemodalne Form2->Show(); by mógł być używany niezależnie z głównym oknem programu.
Problem jest taki, że formularz się otwiera, ale jeśli jest otwierany niemodalne czyli tak jak chciałbym Form2->Show(); nie rusza w nim wątek.
Watek rusza gdy formularz z DLL otwieram modalnie Form2->ShowModal();
Najważniejsze kody są następujące:
KOd z DLL otwierający formularz:
KOD cpp: UKRYJ
#include <vcl.h>
#include <windows.h>
#include "Unit2WDll.h"
#pragma hdrstop
#pragma argsused
extern "C" __declspec(dllexport) void ShowDllForm();
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
void ShowDllForm()
{
Application->Handle = Form2 ;
TForm2 *Form2 = new TForm2(Application);
Form2->Caption = "Form2 Wywolano z DLL";
Form2->Show();
}
#include <windows.h>
#include "Unit2WDll.h"
#pragma hdrstop
#pragma argsused
extern "C" __declspec(dllexport) void ShowDllForm();
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
void ShowDllForm()
{
Application->Handle = Form2 ;
TForm2 *Form2 = new TForm2(Application);
Form2->Caption = "Form2 Wywolano z DLL";
Form2->Show();
}
Sam formularz wywołujący watek:
KOD cpp: UKRYJ
#include <vcl.h>
#pragma hdrstop
#include "Unit2WDll.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Memo1->Lines->Add("TForm2 Start...") ;
Watek = new MyWatek(true);
Watek->Memo1 = Memo1;
Watek->OnTerminate = MyOnTerminate;
Watek->Resume();
this->ileWatkow++;
Memo1->Lines->Add((String) Watek->ThreadID);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::MyOnTerminate(TObject *Sender)
{
this->ileWatkow --;
Memo1->Lines->Add((String) this->ileWatkow);
}
void __fastcall TForm2::FormCreate(TObject *Sender)
{
Memo1->Clear();
}
#pragma hdrstop
#include "Unit2WDll.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Memo1->Lines->Add("TForm2 Start...") ;
Watek = new MyWatek(true);
Watek->Memo1 = Memo1;
Watek->OnTerminate = MyOnTerminate;
Watek->Resume();
this->ileWatkow++;
Memo1->Lines->Add((String) Watek->ThreadID);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::MyOnTerminate(TObject *Sender)
{
this->ileWatkow --;
Memo1->Lines->Add((String) this->ileWatkow);
}
void __fastcall TForm2::FormCreate(TObject *Sender)
{
Memo1->Clear();
}
Okno główne programu:
KOD cpp: UKRYJ
#include <vcl.h>
#pragma hdrstop
#include "Unit3TestujDll.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
extern "C" __declspec(dllimport) void ShowDllForm();
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
ShowDllForm();
}
#pragma hdrstop
#include "Unit3TestujDll.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
extern "C" __declspec(dllimport) void ShowDllForm();
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
ShowDllForm();
}
Może i tym razem uda się Wam mi pomóc na co gorąco liczę





