PDA

View Full Version : OLE e Borlan Builder


misterx
26-10-2004, 14:09
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(...){}

}

misterx
27-10-2004, 21:08
possibile che utilizzo solo io queste, chiamiamole tecnologie strane di windows ?

misterx
29-10-2004, 13:31
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:

misterx
18-11-2004, 11:07
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...

misterx
18-11-2004, 11:25
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.

misterx
18-11-2004, 12:44
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...

misterx
19-11-2004, 07:27
ho trovato OleView, ora ci guardo


grazie :)

misterx
19-11-2004, 07:43
è incomprensibile quello che si legge :(

misterx
21-11-2004, 16:29
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 ?

cionci
21-11-2004, 16:42
Fai un thread ;)

Che trucco hai usato ?