Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: Maxx - Maggio 01, 2018, 12:02:21 am

Titolo: "cannot load default firebird clients...".
Inserito da: Maxx - Maggio 01, 2018, 12:02:21 am
Oppure "can not load default firebird clients...".
Buonasera.
Dovevo connettermi con un database localizzato su un altro PC, ma non c'era verso di farlo funzionare con un programmino in Lazarus che avevo creato io sul mio portatile. Il programma non riconosceva le librerie fbclient.dll che si trovavano sul PC destinazione.

Controllato, le DLL sul PC target erano a 32 bit mentre sul mio erano a 64. Arcano svelato. Disinstallate le 64 dal mio ed installate le 32, Lazarus mi dava il messaggio in oggetto, che mi traeva in inganno in quanto sembrava che non trovasse un "percorso di default dove cercare le librerie".
Ho riinstallato lazarus-1.8.0RC5-fpc-3.0.4-win64 (consiglio di riinstallazione trovato in numerosi topic sull'argomento), ma il problema persisteva.
Notando che anche con flamerobin 64 incontravo gli stessi problemi, ho risolto installando la versione di Lazarus a 32 bit, in quanto quella a 64 non riconosce le libs a 32 (e ciò non è/era per nulla scontato, più o meno come se Windows a 64 bit non riuscisse a riconoscere una DLL a 32 bit).

Perso un sacco di tempo per non aver trovato in rete questo stupidissimo consiglio. Spero che a qualcuno ciò sia utile.

PS. Solo questione di un'esperienza, non è un assioma assodato ma con beneficio di inventario. Astenersi... etc. :)

Ciao, Maxx
Titolo: Re:"cannot load default firebird clients...".
Inserito da: SB - Maggio 06, 2018, 08:51:13 am
Sono un po' arrugginito su queste cose e probabilmente qualcuno saprà spiegare meglio la faccenda. Comunque ci provo...
Un programma eseguibile o è a 32 bit o è a 64 bit (linguaggio macchina diverso)
Win64 esegue programmi a 32 bit, se non erro, tramite una macchina virtuale che ne interpreta il codice macchina (quindi lentezza e sovraccarico del sistema...) O forse c'è qualche modalità del processore che lo rende retrocompatibile...
Una dll è solo un pezzo di codice esterno al programma principale, ma quando viene eseguita il codice si fonde.
Quindi non è possibile avere un programma a 64 bit e una dll a 32 (o viceversa). Sarebbe una mescolanza di codici macchina...
Il vero problema è: perchè hai una dll a 32 bit? Io cercherei, se esiste, la versione a 64 bit, piuttosto che utilizzare la versione a 32 bit di lazarus
Se poi non esiste la versione a 64 bit di fbclient.dll allora farei come hai suggerito tu
Però controlla bene, perchè esiste la versione a 64 bit di firebird, quindi è presumibile che abbiano aggiornato anche il client



Titolo: Re:"cannot load default firebird clients...".
Inserito da: Maxx - Maggio 15, 2018, 10:00:15 pm
Tnx, alla fine c'ero arrivato anch'io! :)
---
Semplicemente perché il programma proprietario che usa la fbclient.dll è stato compilato, per motivi loro (immagino di compatibilità tra le installazioni che hanno fatto), con la dll a 32 bit.