Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

DLL export kontrole

[es] :: Pascal / Delphi / Kylix :: DLL export kontrole

[ Pregleda: 1113 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.gs1hr.org.



+4 Profil

icon DLL export kontrole25.11.2021. u 13:28 - pre 28 meseci
Pokušavam i ne uspjevam....

DLL kreiram u Delphi XE 10.1
u njemu je dodan TDataUnit na kom su kontrole za konekciju na MySQL i qry za dohvat podataka
Pozivom proc. "Connect" otvaram konekciju i qry

Main program u Delphi 2007
trebao bi doći do DataSourc-a iz DLL-a kako bih ga konektirao na DBGrid.

Da li to uopće moguće?
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
31.223.145.*



+62 Profil

icon Re: DLL export kontrole26.11.2021. u 10:16 - pre 28 meseci
Nije najjasnije iz posta kako si zamislio sve.
Namece se pitanje zasto nisi koristio package, ali verovatno ima razlog (kompatibilnost)?

Pitanja:
1. U TDataUnit-u se nalazi i trazeni DataSource, tacno?
2. Connect je samo procedura, bez parametara?
3. Kako si postavio deklaraciju procedure Connect: std, cdecl ili pascal?

Krenemo od ovoga, pa ce se videti kako dalje.
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
46.188.160.*



+4 Profil

icon Re: DLL export kontrole27.11.2021. u 23:08 - pre 28 meseci
Odustao sam od te varijante, nisam uspio naći rješenje. Riješio sam problem tako da sam sav posao koji treba odraditi prebacio u DLL. Kreirao sam forme i data unit unutar DLL-a.

Program je u D2007
DLL je u D XE 10.1

Sada se pojavljuje problem sa resizanjem forme koja je kreirana u DLL-u. Želim da bude maksimizirana na svom parentu.
Parent forme je TTabSheet.
Forma se pokreće maksimiziran na trenutnoj veličini parenta, ali se kod resizanja parenta ne resize forma.

Pokušao sam mjenjati parametre forme:
- Anchors (isto je ako stavim sve na true ili sve na false)
- Position (nema efekta)
- WinodwState = wsMaximized

Pokušao sam u Form1.FormShow staviti self.WindowState := wsMaximized

Forma nema border, tj. BorderStyle = bsNone jer se treba prikazati kao dio D2007 programa.

Iskušao sam DLL u test programu, sve radi uredno osim samog prikaza forme.

Ideje? Savjeti?


 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: DLL export kontrole29.11.2021. u 09:53 - pre 28 meseci
Nema sanse da koristis TDataset iz dlla u glavnom programu ako su razlicite verzije Delphija.
Nisam siguran ni za iste verzije, moze preko paketa (sto je zapravo dll uz neki dodatak).

Zelis da napravis formu u dllu a da ga koristis u glavnom programu? Razlicite verzije Delphija?
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.gs1hr.org.



+4 Profil

icon Re: DLL export kontrole29.11.2021. u 10:20 - pre 28 meseci
Da, različite verzije programa. Glavni program je u D2007, a DLL u Delphi XE 10.1
Zašto? Moram koristiti podatke s Web-a (MySQL) i tu imam problema. Korisitio sam ZEOS, ali mi je počeo javljati greške (internal error...), a ne isplati se kupovati nešto ozbiljnije jer je za samo jedan projekt. Ne mogu prepisati program u XE jer neće platiti i tako... krpam...

Napravio sam DLL koji u sebi ima sve: formu koju prikazuje, konekciju na bazu, dataset... radi dobro. Popravljam još neke greške, ali je OK.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: DLL export kontrole29.11.2021. u 12:22 - pre 28 meseci
Neki tamo Delphi 1 u demos je imao primer kako se kreira forma.
Ne mogu da nadjem taj primer a posto je bilo pre puno godina ne secam se ali mi se cini da se formirala odvojeno od main forme.
Ima novijih promera ali svi rade odvojeno od main forme.
Nisam pravio tako nesto tako ne znam sta bi falilo za resize.

Rekao bi da se odvojeno promaju WM_ poruke i fali nesto sto bi povezalo potpuno.

Recimo, u tom cluacju mozda moze da pomogne nesto kao:

application.handle:=GetExeHandle; // GetExeHandle - How to learn?

Taj primer sam izguglao trzaci application.handle a na tom linku pise:

The only time your DLL shows a dialog box is when the host application calls a function from your DLL.
Include the parent window handle as one of the function's input parameters so that the EXE can
tell you which handle to use. Do not attempt to discover the handle yourself. As a library developer,
you cannot guess what the host application is doing.

If you don't want to include the handle on every function call, then add an initialization function
that users of the DLL need to call before any other functions. Pass the handle in the initialization
and then store it in a variable in your DLL so that other functions can use the value when they need it.

To sam guglao jer pretpostavljam da tako nesto fali ali koliko moze da pomogne za recimo resize nemam pojma.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: DLL export kontrole29.11.2021. u 13:19 - pre 28 meseci
OK, to je moguce i koristio sam ali u istoj verziji Delphija. Da li ce raditi iz razlicitih nisam siguran (ako ne radi, napravi standalone pomocni program ciji ces prozor udenuti u glavni program).

Bitna stvar je da oba koriste isti MM, moras u dllu imati ovako nesto:

Code:


procedure Init(const MemMgr: TMemoryManager);
begin
  SetMemoryManager(MemMgr);
end;

exports Init;

U glavnom programu, 
var
  MemMgr: TMemoryManager;
begin
  GetMemoryManager(MemMgr);
  Init(MemMgr);

  // Dalje pozivas dll metodu koja prikazuje formu i radi sta treba
end;




 
Odgovor na temu

_deran_

Član broj: 69493
Poruke: 252
91.232.237.*



+1 Profil

icon Re: DLL export kontrole30.11.2021. u 08:04 - pre 28 meseci
BPL mora biti kompajliran u istoj verziji delphi-a koji ga koristi. To mu je mana u odnosu na DLL.
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.zg3.cable.xnet.hr.



+4 Profil

icon Re: DLL export kontrole30.11.2021. u 09:54 - pre 28 meseci
Napravio sam i dobro funkcionira. Predao sam izmjene programa stranic i (bar za sada) se nisu javili da nešto ne štima.

U XE Dll-u ima export procedure:
Code:

  procedure SynApp(App: THandle; Parent: HWND); stdcall;
  begin
    Application.Handle := App;
    if not Assigned(Form1) then begin
       Form1 := TForm1.CreateParented(Parent);
    end;
    Form1.Show;
  end;

  procedure Disconnect; stdcall;
  begin
    Form1.Close;
    FreeAndNil(Form1);
  end;                     


"Parent" je ttabsheet na kom se prikazuje forma "Form1" koja je maximizirana. Bodući da je main program uvijek maximiziran nemam problema s maksimiziranjem Form1. Problem je ako main program nije maximizira je se kanije Form1 ne može maksimizirati (nema border niti gumbe za max.)

U Form1.OnClose radim free objekata, data modula i svega ostaloga...

U Main programu pozivam proceduru:
deklarirane public varijable:
Code:

     var
       MySqlDisconect: tMyDisconect;
       MySqlSynApp: tSynApp;
       MySqlHandle: THandle;


Procedura:
Code:

    ...
     Screen.Cursor := crHourGlass;
     try
        if MySqlHandle = 0 then MySqlHandle := loadLibrary('MySQLConnection.dll');
        if MySqlHandle <> 0 then begin
           @MySqlSynApp := GetProcAddress(MySqlHandle, 'SynApp');
           @MySqlDisconect := GetProcAddress(MySqlHandle, 'Disconnect');
           MySqlSynApp(MainFrm.Handle, tsWeb2.Handle);
        end else   
           showMessage ( 'DLL MySQLConnection nije pronađen...' );
     except
     end;
     Screen.Cursor := crDefault;


I konačno, da ne bi program javljao errore kod Form.Close
Code:

TMainFrm.FormClose(Sender: TObject; var Action: TCloseAction);
...
  if MainPageControl.ActivePage = tsWeb2 then MySqlDisconect;
  if MySqlHandle <> 0 then FreeLibrary(MySqlHandle);

 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.gs1hr.org.



+4 Profil

icon Re: DLL export kontrole01.12.2021. u 13:39 - pre 28 meseci
Da ne otvaram novu temu...

Na formi koju kreiram u DLL-u dinamički kreiram TEdit-e. Na njima ne rade strelice lijevo-desno! Riješio sam tako da sam na OnKeyUp napravio preko selstart, ali mi nije jasno o čemu se radi budući da se uredno može upisivati u Edit-e.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: DLL export kontrole01.12.2021. u 14:28 - pre 28 meseci
VCL ima neke svoje obrade za brdo tastera i kombinacija, mozda to salje drugoj aplikaciji ili formi (glavnoj) ili se negde zagubi u tom procesu.
Jedino da pustis kroz debugger dok ne vidis gde zavrsi.

 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.gs1hr.org.



+4 Profil

icon Re: DLL export kontrole01.12.2021. u 14:36 - pre 28 meseci
U test programu, koji ne koristi DLL već se taj dio koda uzme kao obična forma, radi sve OK. U programu gdje ga koristim kao DLL, ne mogu debagirati. Nadao sam se da je netko već imao takovih problema...
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: DLL export kontrole02.12.2021. u 06:37 - pre 28 meseci
Debagujes formu u dllu, ne u glavnom programu.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: DLL export kontrole02.12.2021. u 10:53 - pre 28 meseci
Moze ovako da se provri:

Code (delphi):


    FOnAppMessage := Application.OnMessage;
    Application.OnMessage := AppMessage;


procedure TMainForm,AppMessage(var Msg: TMsg; var Handled: Boolean);

    if (Msg.message >= WM_KEYFIRST) and (Msg.message <= WM_KEYLAST) then
    begin
    end;

    if assigned(FOnAppMessage) then
      FOnAppMessage(Msg, Handled);



 

 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: DLL export kontrole

[ Pregleda: 1113 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.