Newsgroup: it.comp.lang.delphi
Titolo: Uso DLL

Per favore, chi può spiegarmi meglio questo messaggio di compilazione ?
16-Bit fixup encountered in object file '<text>'
Quello che sto facendo (o almeno sto tentando di fare... ) è questo: ho
creato una DLL con una banalissima funzione (tanto per provare il richiamo).
Ho una form che richiama la funzione della dll e tutto è ok.
Creo un seconda unit, unit2, che richiama la funzione (in pratica, invece di
richiamarla direttamente nella unit1 richiamno la funzione della dll nella
unit2 e poi metto la unit2 nelle uses.
Tutto ok ancora.
Dico di compilare producndo OBJ invece di DCU.
A questo punto tolgo la unit2 dalle uses della unit1 e metto nella unit1 la
direttiva {L unit2.obj}.
Compilando mi dà l'errore di cui sopra.
Perchè questo giro asurdo ?
Mi è stato chiesto se è possibile sfruttare una DLL da un'applicazione DOS a
16bit (logicamente DLL senza finestre e quant'altro di grafico) e l'unica
soluzione che mi si para davanti è creare con Delphi un OBJ (che poi linko
nel creare l'eseguibile) il quale gestisce la DLL e rende il tutto
disponibile al resto del codice scritto in C.
Questo è fattibile se pensate che per poter gestire le chiavi parallele
Eutron in WinNT, Win2000 e WinXP il programma riesce a sfruttare un DLL
fornita dalla Eutron attraverso un file OBJ sempre fornito dall'Eutron.
Spero di non aver annoiato.
Andrea

 ha scritto nel messaggio
news:zD%Uc.45026$1V3.1...@twister2.libero.it...


 La direttiva corretta e' $L e non L.
Qualche dritta sul messaggio d'errore ? almeno a capire cosa significa ?
Andrea


Non saprei, uso un .obj in un mio programma e la direttiva, del tutto simile
alla tua e' messa dopo l'Uses che segue l'Implementation e subito sotto la
direttiva definisco la funzione che uso nell'OBJ. con le convenzioni di:
stdcall; external; ed e' sempre andata.
Ciao Giorgio Padoan

 stdcall; external; ed e' sempre andata.
Andrea

 disponibile al resto del codice scritto in C.
Stai utilizzando Delphi 1, no?
-- 
Marco «Alka» Breveglieri
  ABLS Team S.n.c. - Software & Web
  Via De Gasperi, 14
  42019 Scandiano (Reggio Emilia)
 
http://www.abls.it

No, avrei dovuto metterlo subito nel post
Win98SE (ininfluente...), Delphi 4


 Win98SE (ininfluente...), Delphi 4
Solo con Delphi 1 puoi produrre applicazioni a 16 bit.


 Solo con Delphi 1 puoi produrre applicazioni a 16 bit.
No no, l'applicazione a 16bit la realizzo in C, direttamente in ambiente
DOS.
Volevo usare Delphi (il mio Delphi 4) per realizzare il file OBJ da linkare
agli altri dell'applicazione (ripeto fatta in C in ambiente DOS), file OBJ
che fa da tramite fra l'applicazione stessa e la DLL.
So che la Eutron sfrutta una DLL per permettere alle applicazioni a 16 bit
di vedere le sue chiavi parallele in ambiente NT, fornendo loro direttamente
la DLL ed il file OBJ da linkare.
P**** perchè non dveo riuscirci anch'io ?
Andrea

> Solo con Delphi 1 puoi produrre applicazioni a 16 bit.
Non è che mi stai consigliando di usare Delphi4  per fare la DLL e il
vecchio Delphi1 per fare il file OBJ ?
Se non erro, ma devo controllare, nel CD dovrebbe esserci anche il Delphi1
....
Andrea

 che fa da tramite fra l'applicazione stessa e la DLL.
Sì, avevo compreso tutte le "variabili" del caso in esame. :-)
Non lavoro in C pertanto non ricordo nemmeno l'organizzazione del 
contenuto dei file OBJ, ma ti ho segnalato il fatto che Delphi 4 produce 
eseguibili per Win32 solo per fare in modo che tu, conoscendo la 
struttura dei file OBJ meglio di me, ti ponessi la seguente domanda:
"i file OBJ realizzati con un compilatore Win32 (a 32 bit) sono 
effettivamente utilizzabili per linkarli ad una applicazione a 16 bit?".
Solo tu puoi rispondere a questa domanda...se la risposta è negativa, 
hai già compreso l'origine del problema. :-)


 Se mi offri una spalla mi metto a piangere :-(((((((((((((((((
'azzolina, spero non mi tocchi creare un "console application" per far
dialogare 'sti due c****.
Ultimamente abbiamo sfruttato molto queste "applicazioni" per dotare
programmi DOS di funzionalità "win$ozz" ...
Mi sa che questa delle DLL è dura da digerire ...
Quello che non capisco è l'errore che mi dà il compilatore Delphi visto che
il OBj che tento di linkare con $L è stato prodotto sempre dal Delphi4,
quindi sicuramente a 32 bit ...
Sono stanco, è da stamattina ...


 ha scritto nel messaggio
news:Lt3Vc.45382$1V3.1...@twister2.libero.it...

Mi autorispondo: ho installato Delphi1 ma non ho la possibilità di fare OBJ
.... piango!
Andrea

Scusate ma c'e' un po' di confusione. Phora mi sembrava avesse detto che
lasciando la Unit2 come .dcu funzionava tutto OK?? ma allora se come .dcu si
linka correttamente alla DLL non capisco perche' trasformandola in OBJ non
lo fa...
Giorgio

Questo č uno dei problemi.
In ogni caso ho provato anche a creare il file OBJ con C++ 4.0, a 16 bit,
peccato che dopo mi tiri dentro una caterva di altri file LIB ....
Abbandono questa strada.
La soluzione piů banale che ho davanti, sempre per sfruttare 'sta benedetta
(o maledetta) DLL č creare una Console Apllication che lavora
tranquillamente con al DLL e poi gestire questa CA dal mio programma DOS,
usando un banalissimo file per lo scambio dei dati.
Cosa non si fa per la pagnotta ...
Comunque, se qualcuno ha qualche idea + furba č il benvenuto
Buon pranzo.
Andrea