Newsgroup: it.comp.lang.delphi
Titolo: Ancora sulla DLL

Alcune settimane addietro ho chiesto il vostro aiuto che puntualmente è 
arrivato. Ho approffitato di questi giorni per mettere in pratica i vostri 
suggerimenti e le mie aspirazioni, sono riuscito a creare la solita finestra 
"ciao Mondo".
Ma i dubbi sono aumentati, e sono:
1) è possibile in una DLL inserire più form , es. "menù" e da questa tramite 
3 button "info", "configurazione" e "fine" accedere ad altre finestre o 
chiudere SOLO l'nterfaccia della dll.
2) conseguentemente è possibileinserire  componenti per il controllo delle 
porte seriali Turbo async in una di queste finestre.
3) essendo costante l'itilizzo della porta COM e la necessità di elaborare i 
dati inviati la DLL può essere caricata da subito dal programma che la 
utilizza e fatta girare in background?
In attesa del vostro aiuto io continuo comunque a smanettare.
Buon anno a tutti.
Carlo M. 

Una ulteriore domanda questa funzione BC++
***************************************
extern "C"
bool __stdcall __declspec(dllexport) InitHW(char *name, char *model, int& 
type)
{
static bool first = true;
type = 4; // 4 ==> data returned via the sound card
if(first)
{
first = false;
LOfreq = 7050000; // just a default value
.......... init here the hardware controlled by the DLL
......... init here the DLL graphical interface, if any ........
}
strcpy(name, "ACME HW"); // change with the name of your HW
strcpy(model, " Mod. AC456"); // change with the model of your HW
return true;
}
//***********************************************
come si converte in D6 ?
Non conoscendo il C sembra che restituisca come parametro solo un Bool, ma 
anche le variabili name, model and type vengono restituite oppure sono 
globali e appartengono all' ambiente dell'applicazione Winrad che chiama la 
dll?
Inoltre crea un casino quella variabile di nome "type" che per Delphi č 
inutilizzabile, cosa posso fare?
Grazie ancora
Carlo

Sono andato ulteriormente avanti ma non credo che esista qualcosa in Delphi 
che possa sostituire questo tipo di dichiarazione
bool __stdcall __declspec(dllexport) InitHW(char *name, char *model, int& 
type)
Ho riportato la riga integralmente ma il nocciolo della questione è : "int& 
type"
che mi ricorda molto il link dell' ambiente Linux.
Relativamente alla dichiarazione C++ ho trovato alcune semplici info qui:
http://forum.html.it/forum/showthread/t-941951.html
Ho veramente bisogno di aiuto perchè sto brancolando nel buio quasi totale.
Saluti Carlo 

 che mi ricorda molto il link dell' ambiente Linux.
ciao.
Si tratta del passaggio per riferimento, che esiste anche in delphi.
la dichiarazione "int &x" si traduce con "var x: integer" quindi direi 
che la tua funzione potrebbe essere:
// non testato
function InitHW( name, model: PChar; var _type : integer ) : integer;
ciao
Giacomo

 utilizza e fatta girare in background?
Si.
ciao
Giacomo

 ha scritto nel 
messaggio news:K6t7l.145821$Ca.2...@twister2.libero.it...


 Mi sbaglio?
Si, dalla descrizione pare che questa funzione della tua DLL venga 
invocata dal programma al suo avvio per avere delle informazioni. Quindi 
sei sicuro che la tua funzione nella dll viene chiamata almeno una volta.
Ah! Rileggendo attentamente ho notato che ho dimenticato un pezzo! Devi 
aggiungere stdcall in fondo alla dichiarazione della funzione:
// non testato
function InitHW( name, model: PChar; var _type : integer ) : integer; 
stdcall;
ciao
Giacomo

 ha scritto nel 
messaggio news:AUz7l.238490$FR.5...@twister1.libero.it...


   showmessage('Carlo, questa è la tua prima dll');
Quindi non compare nemmeno questo messaggio a video??? :o
Mi viene il dubbio che la tua dll non stia esportando la funzione...
Hai messo la clausola 'exports' nel main del progetto, dovrebbe
essere piu' o meno cosi':
// untested
library MiaLib;
uses ...;
exports InitHW;
begin
end.
ciao
Giacomo

Esatto non da segni di vita la clausola exports alla fine del file project 
prima di begin & end è presente, infatti funziona perfettamente con il prg 
di test in Delphi.
Quello che non mi spiego sono i parametri, che vengono inviati vuoti , o 
almeno suppongo, da Winrad e la funzione InitHW assegna a questi parametri 
una valore a mio piacimento ( compatibilmente al tipo ed al significato) ma 
restituisce semplicemente un valore true a Winrad se la funzione  è andata a 
buon fine.
Le cose sono due o la dll quando viene chiamata non può aprire nessuna 
finestra , ovvero lo fà ma Winrad lo impedisce e genera un errore senza 
mostrarlo. Oppure la funzione viene eseguita ma devo scrivere l'intera dll 
con tutte le altre funzioni per vedere se va' ma con scarse possibilità di 
debug quando la chiamo via Winrad.
Ciao Carlo


 debug quando la chiamo via Winrad.
Dovrebbe essere sufficiente debuggare la dll impostando il parametro
relativo all'exe chiamante. Se metti un breakpoint all'inizio della
funzione si dovrebbe fermare e dovresti riuscire a vedere i parametri
che valori hanno... davvero strano...
ciao
Giacomo

 ha scritto nel 
messaggio news:Frb9l.153373$Ca.2...@twister2.libero.it...


 Certo che rispetto a qualche anno fa questo NG è assai meno trafficato.
Colpa della crisi... :-)
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 Certo che rispetto a qualche anno fa questo NG è assai meno trafficato.
Purtroppo..
Ciao
-- 
Morde

 ha scritto nel messaggio 
news:496b...@newsgate.x-privat.org...


 
Magari fosse cosi'... speriamo che pian piano delphi
riprenda piede nella comunita' di sviluppatori!
ciao
Giacomo