View Full Version : OLE e Borlan Builder
sto usando queso codice per aprire e chidere un foglio di excel ma all'uscita Excel mi rimane costantemente in memoria :muro: anche dopo la chiamata di Excel.OleFunction("Quit");
c'è un motivo ?
c'è qualcuno che conosce OLE ?
grazie 1000 in anticipo
if (OpenDialog1->Execute()) //*.xls-Dateinamen + Pfad angeben
{
try
{
Variant Excel;
Excel = Variant::CreateObject("Excel.Application");
Excel.OlePropertyGet("ActiveWorkBook");
// Excel-Datei öffnen
Excel.OlePropertyGet("WorkBooks").OleFunction("Open", OpenDialog1->FileName);
//Excel.OlePropertySet("Visible", true); //Excel beim Arbeiten anzeigen, false = ausblenden
Variant Sheet;
Sheet=Excel.OlePropertyGet("ActiveSheet");
AnsiString Zelleninhalt = Sheet.OlePropertyGet("Cells", 1, 1).OlePropertyGet("Value");// Zeile 1, Spalte 1 auslesen
ShowMessage(Zelleninhalt);
ShowMessage("Excel wird jetzt wieder geschlossen");
Excel.OleFunction("Quit");
Excel = Unassigned;
}
catch(...){}
}
possibile che utilizzo solo io queste, chiamiamole tecnologie strane di windows ?
caspita che pigroni che siete.....:D
vi risulta che l'utilizzo di tecnologia OLE nei propri programmi abbia prestazioni scadenti ?
io con un codice simile a quello del primo post, impiego 20 secondi per trasferire dati da un foglio di Excel su file; possibile avere prestazioni così scadenti ??? :muro:
up :O
se guardate il codice da me postato, osseverete che utilizza l'ole automation
parlando di compilatori:
io, per usare tali funzioni da "iniettare" dal BCB (Borland Builder C++) includo il seguente file:
#include <utilcls.h>
mi viene un dubbio
da tale file, è possibile risalire alle funzioni che sono implementate nel compilatore in mio possesso ?
a me durante la fase di compilazione non vengono generati errori, ne vedo solo in fase di esecuzione :(
ilsensine
18-11-2004, 11:20
Lungi da me essere un guru di OLE, ma sei sicuro che questa
Excel.OleFunction("Quit");
sia sufficiente a distruggere l'oggetto allocato in precedenza, e a rilasciare il reference? La riga successiva non credo che abbia effetto...
non sono una mago neppure io, difatti quella chiamata svolge malissimo il suo compito
Excel rimane ancora in memoria
tieni presente che quel codice è un esempio che ho trovato in rete e l'ho preso così com'è
ilsensine
18-11-2004, 11:40
Non c'è un metodo "release" o simili?
Rimuovi anche l'assegnazione di Unassigned; può darsi che alla distruzione dell'oggetto variant, viene invocato il codice di rilascio automaticamente.
non esiste quanto dici.....
in rete si trovano esempi solo su siti francesi e cinesi o giapponesi
anche eliminando quello che tu hai detto non accade nulla
per questo ho iniziato a dubitare che il BCB che possiedo io, magari non implementa tutte le funzioni in quanto, la visualizzazione de messaggi di errore avviene solo dopo l'esecuzione del programma e non in fase di compilazione
se apro il task manager mi ritrovo costantemente Excel in esecuzione
Variant Excel;
Excel = Variant::CreateObject("Excel.Application");
negli esempi che si trovano in rete, con:
Excel.OleFunction("Quit")
dovrebbe venire rilasciato l'oggetto creato sopra, ma tale chiamata non sortisce l'effetto desiderato
ilsensine
18-11-2004, 21:08
Prova a cambiare tecnica...importa la tlb (type library) di Excel ed usa direttamente quella
Almeno puoi vedere i metodi supportati dai vari oggetti...
ho trovato OleView, ora ci guardo
grazie :)
è incomprensibile quello che si legge :(
va bene, ho messo il tutto a posto con un trucco anche se il Quit funziona molto male, bah...
mi stavo chiedendo come ovviare al non multitask del programmetto sopra nel senso che: quando lo eseguo, durante la fase di apertura di Excel e del relativo foglio, il mio programma viene messo a tacere
durante l'esecuzione del mio programma per far capire all'utente che il tutto sta funzionando correttamente, ho implementato un piccolo orologio che purtroppo si ferma nel momento in cui inizia la fase di apertura di Excel e del relativo foglio
quando il controllo poi torna al mio programma, torna a funzionare
però quella pausa da veramente fastidio
c'è un modo per evitarla ?
Fai un thread ;)
Che trucco hai usato ?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.