Newsgroup: it.comp.lang.delphi
Titolo: Utilizzo dll in c++ da delphi

Salve a tutti. Vorrei sottoporvi qusto problema:
- ho creato una dll in C++ all'interno di VisualStudio2005: esporta un 
metodo con tanto di direttive:
    extern "C" __declspec(dllexport)
- un semplice applicativo scritto con delphi7 la carica (solita LoadLibrary) 
e ne invoca il metodo dopo averne ottenuto l'indirizzo con la GetProcAddress
Inizialmente ho avuto questo esito:
Lanciando l'eseguibile (da esplora risorse) e agganciandomi al processo 
running (strumenti di "Attach to process" di VS2005), tutto funzionava 
correttamente e riuscivo anche a debuggare la dll.
Ad un certo punto (a meno di sdoppiamento della personalit�, credo di aver 
fatto solo un rebuild completo in release mode della dll per mettermi a 
lavorare sul versante delphi), nulla sembra pi� funzionare: l'applicativo 
parte dopo parecchio tempo (come se non trovasse subito la dll e dovesse 
cercare in molti percorsi, anche se questa � sempre stata nella cartella 
dell'eseguibile), la load library non funziona tanto bene (GetLastError = 
203) e la ricerca dell'indirizzo della procedura esportata fallisce 
(GetLastError = 126).
Dopo aver compilato, ricompilato, eliminato ogni possibile dll con lo stesso 
nome della mia, (che non sia quello che io voglio venga caricato), credo di 
aver capito che non so pi� cosa fare... c'� qualche anima pia che saprebbe 
darmi qualche dritta???
Grazie in anticipo!

 darmi qualche dritta???
ti butto giï¿œ qualche idea:
Su che macchina ti trovi, xp, vista, seven?
Prova a rinominare la dll, e debuggare lato delphi il caricamento e 
vedi se ï¿œ ancora lento sulla loadlibrary.
Accertati che l'antivirus non dia fastidio in qualche modo, 
prevaricando l'accesso alla dll (io ho kaspersky e lui prima di 
lasciarti aprire un file lo controlla sempre)
"A bocce ferme", verifica con l'eccellente unlocker 
(
http://ccollomb.free.fr/unlocker/
) chi ha in uso il file.
Utilizza processxp (
http://tinyurl.com/ys2zq2
) per analizzare tutte le 
dll che carica il tuo programma di test, se tutto coincide, risorse 
allocate, ecc..
Ripeti il test in modalitï¿œ provvisoria, lanciando semplicemente il test 
senza aprire gli IDE di delphi e VS.
Verifica cosa cambia, se cambia qualcosa, perchï¿œ ï¿œ cambiato, prima e 
dopo cosa c'ï¿œ di diverso?
Ciao
-- 
Morde

 (GetLastError = 126).
Apparentemente non � un problema di name mangling perch� hai usato la
extern "C". Hai provato a linkare staticamente la DLL?
Verifica inoltre le variabili del tuo environment.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ecc..
Vedo l'applicativo linka correttamente la dll che voglio io (quella che si 
trova nella cartella dell'eseguibile).
Intanto grazie per l'aiuto!

 Verifica inoltre le variabili del tuo environment.
Cosa intendi? 

 se � ancora lento sulla loadlibrary.
Dopo qualche tentativo disperato sembrava fossi riuscito a farlo funzionare 
ancora, poi ha smesso dandomi un problema ancora diverso: non riesco pi� ad 
ultimare la LoadLibrary: entra nella LoadLibrary ma non ne esce pi�...

 ultimare la LoadLibrary: entra nella LoadLibrary ma non ne esce più...
..E se provi a usarla da un exe WIN32 generato sempre in c++ da vs?
Ho altre domande, ma tengo a precisare che non ho mai usato c++ da
vs.net..Ho usato solo c#.
Quindi, ti chiedo scusa in anticipo se scrivo cazzate o faccio domande
cretine...
1) In 
vs.net
, puoi creare in c++ una dll .NET che NON sia una
librearia di classi oppure puo' essere SOLO una libreria di classi?
2) Se riprovi a compilarla non in release mode cosa succede?
3) Non e' che la dll ha uno strongname o altri accrocchi di .net?
A.