Newsgroup: it.comp.lang.delphi
Titolo: liberia dbxfb.dll

Delphi XE2
Progetto sviluppato su Win7 64
Db Firebird 2.5 32 bit
componenti DBExpress
Firebird installato
Db Funzionante, con la console IbExpert pienamente operativo
 
con Delphi XE2 ambiente installato funziona tutto regolarmente
se porto l'applicazione su un Pc senza Delphi all'avvio mi chiede
dbxfb.dll
la prelevo da
C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\Redist\win32
la copio nella c:\Windows\System32 (Win XP)
ma anche se la prelevo dalla cartella di debug Win32 di XE2 non
cambia il risultato.
 
avvio l'applicativo e windows invia il messaggio
"La libreria o DLL su C:\Windows\System32 non è un'immagine valida di 
Windows"
a seguire
unable to load dbxfb.dll (Error code 193) it may be missing from the 
system path
 
non mi spiego il motivo
il componente TSQLConnection prevede
LibraryName : dbxfb.dll
VendorLib : fbclient.dll
entrambe le dll presenti su c:\Windows\System32
 
preziosa qualunque indicazione
grazie.

 Windows"
 
La tua applicazione per quale piattaforma è compilata, 32 bit o 64?
 
-- 
MARCO BREVEGLIERI 
#Home: 
http://www.marco.breveglieri.name
 
#Blog: 
http://www.compilaquindiva.net
 

>
32 bit

1) cerca sul pc xp tutte le copie della DLL incriminata
Non usare la ricerca di windows. Prova un dir /s da command prompt.
Oppure, se ti va, prova questo software:
 
http://www.voidtools.com/
 
 
2) Cancella TUTTE le copie della DLL incriminata.
3) copia la DLL incriminata dal pc win7 al pc xp.
 
A.
 


ho seguito le tue indicazioni e trovato 1 sola .dll in una
directory non del progetto, eliminata oltre alle altre note.
 
ricopiata quella funzionante in delphi, ma ancora non risolvo
il problema permane identico.
 
potrebbe essere un'altra dll mancante e non la dbxfb.dll la
causa;
come faccio a sapere quali .dll sono rischieste a runtime ?
 

 come faccio a sapere quali .dll sono rischieste a runtime ?
 
tdump
 
A.
 

>
eseguito Tdump /el /v Prj_SIC.exe > dump.txt
 
questo l'elenco delle dll
 
oleaut32.dll
advapi32.dll
user32.dll
kernel32.dll
msimg32.dll
gdi32.dll
version.dll
mpr.dll
comctl32.dll
msvcrt.dll
shell32.dll
comdlg32.dll
winmm.dll
oleacc.dll
GDI32.DLL
 
winspool.drv
 
mi sarei aspettato di trovare dbxfb.dll;
 
la prima cosa che l'applicativo č agganciare il Db Firebird tramite 
TSqlConnection.
 

 mi sarei aspettato di trovare dbxfb.dll;
 
A parte che il tdump avresti dovuto utilizzatlo prp su dbxfb.dll, è ovvio che non la trovi.....
tdump ti becca SOLO LE DLL referenziate in modo esplicito e NON QUELLE referenziate a RUNTTIME USANDO LOADLIBRARY.
Per ovvi motivi TSqlconnection usa loadlibrary a runtime per caricare il driver dbx.
 
A.
 

>
fatto TDump /el /v c:\pippo\dbxfb.dll > dumpdbx.txt
 
Kernel32.dll è presente in /Windows/System32
dbxfb.dll su c:\pippo
 
altre cose da controllare sul dump ?
 
 
******************************************************************************
Section:             Import
File Offset:         00084400 (541696)
   ImportLookUpTblRVA:0008A028
   Time Stamp:        00000000
   Forwarder Chain:   00000000 (index of first forwarder reference)
 
Imports from KERNEL32.dll
     (hint = 0369) MultiByteToWideChar
 
******************************************************************************
Section:             Exports
File Offset:         00069A00 (432640)
   Flags:             00000000
   Time Stamp:        4E599868 : Sun Aug 28 03:22:48 2011
   Major Version:     0000
   Minor Version:     0000
 
Exports from dbxfb.dll
   66 exported name(s), 66 export addresse(s).  Ordinal base is 1.
   Sorted by Name:
... elenco esportate


 
Hai messo DBXDynalink tra le uses del tuo progetto? con D2010 ho risolto 
così.
 
Ciao.
 

> Hai messo DBXDynalink tra le uses del tuo progetto? 
 
 
????
 
A.

 rilancio e solito errore .... dbxfb.dll ...non è un'immagine valiva
 
sei assolutamente certo che exe e dll siano congrui sul fatto di essere entrambi a 32 o 64 bit? E' l'unica cosa che mi viene in mente.
 
 
A.


 
In un progetto in cui stavo provando DBX mi veniva restituito un errore 
simile e mettendo la unit DBXDynalink tra le uses del progetto, ma va 
bene anche in una qualsiasi unit, avevo risolto.
 
Ciao.
 


si tutto a 32 bit, ricontrollato, si sa mai una botta di ricoglio ...
 
Nota: trovo differenze tra versione Debug e Release
 
La Build in debug restituisce 4 per sAvvio.Count
La Release restituisce 1 per sAvvio.Count
 
non riconosce
 
il file Avvio.txt contiene 4 righe
 
L736
locale
Firebird
GESTIONEAREE.FDB
 
questo il codice
 
var F: TextFile;
     sAvvio: TStringList;
     sLettura: string;
begin
   sPath := ExtractFilePath(Application.ExeName) + 'DataBase\';
 
   sAvvio := TStringList.Create;
 
   {$I-}
   AssignFile(F, sPath + 'Avvio.txt');
   Reset(F);
 
   sAvvio.Delimiter := ';';
   ReadLn(F, sLettura);
   sAvvio.DelimitedText := sLettura;
   CloseFile(F);
   {$I+}
 
  sAvvio.count;
  ShowMessage('Inizio ' + IntToStr(sAvvio.Count));
 

>
 
l'errore c'era .... la stringa è questa
L736;locale;Firebird;GESTIONEAREE.FDB
 
sia Febug che Release trovano 4 elementi.
 
ma dbxfb.dll non la risolvo.
 
ho provato altri applicativi D2007 che si appooggiano allo stesso db
e non ci sono problemi, il problema è con il distribuibile di XE2.
 
perchè in rete parlano di un fix della dbxfb.dll ?

> [...]
 
risolto cosï¿œ:
 
aggiunto alle uses Midalib
prelevato dbxfb.dll da
C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\bin
e copiata nella directory del pc con l'eseguibile
 
eseguiti test su VM con WinXP e Seven 64bit
 
senza Midaslib, aggancia il Db ma non legge le Tabelle;
stranamente non solleva eccezione per la mancanza di Midas.dll
 
su XP dbxfb.dll deve essere presente nella directory dell'eseguibile,
su Seven che sia presente o meno non fa differenza.