Newsgroup: it.comp.lang.visual-basic
Titolo: Errore di overflow e di memoria esaurita :-(

Qualcuno sa cosa puo' causare un errore di overflow (6) in seguito ad una
chiamata shell come la seguente?
ret = shell("start "+nomefile, vbhide)
Gia' mi da un po' fastidio che si debba ricorrere alla shell per aprire un
file con l'applicazione associata (ci sara' un modo piu' consono immagino)
Ma questo errore di overflow proprio non lo capisco.
Fra l'altro dopo un on error resume next il programma va avanti senza alcun
particolare problema.
Dato che ci sono avrei un altro dubbio da sottoporvi e riguarda (immagino)
la memoria dell'heap locale.
Insomma io uso questa funzione nel mio programma:
-----------------
Public Function CaricaFile(NomeFile As String) As String
Rem carica il file (contenente solo testo) NomeFile
Rem e restituisce una stringa che contiene l'intero
Rem testo di NomeFile
Rem se c'e' un errore visualizza un messaggio e restituisce
Rem una stringa = ""
Dim MiaStringa As String
Dim ret As Integer
Dim TotSize As Long
Dim NFile As Integer
If (Dir(NomeFile) = "") Then
    Bip (BP_Errore)
    ret = MsgBox("File " + Chr(34) + NomeFile + Chr(34) + " non trovato",
vbCritical)
    CaricaFile = ""
    Exit Function
End If
TotSize = FileLen(NomeFile)
MiaStringa = String(TotSize, " ")
NFile = FreeFile
Open NomeFile For Binary As NFile
Get NFile, 1, MiaStringa
Close NFile
CaricaFile = MiaStringa
End Function
--------
Ebbene dopo un certo numero di chiamate (sulle centinaia), mi si blocca
dandomi l'errore di run-time: memoria esaurita.
Non capisco il perche'.
Io le stringhe/file caricate non le mantengo mica stabilmente.
Ne faccio la scansione e poi riutilizzo sempre la stessa stringa per
caricare il file successivo.
Perche' invece sembra che la memoria vada esaurendosi chiamata, dopo
chiamata?
Ma cosa piu' importante: come rimediare? :-/
grazie
Paolo B.

 chiamata?
perchè il file si allunga??

 dim ret as.... dovrebbe essere LONG
[SNIP]
Shell ritorna un Double...
Ciao
--
Luca Dormio
luca....@tin.it


ok, allora double.
Se vogliamo essere proprio certi di non generare un overflow, mettici un
Triple.
HAHAHAHAHAHHAAAAAAAA
NO FERMO! SKERZO!
...noncelafopiů...
....Dio, portami a casa.......


 ....Dio, portami a casa.......
machetteridii ???????

 file con l'applicazione associata (ci sara' un modo piu' consono
immagino)
Non č proprio vero:
Option Explicit
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA"
(ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As
String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal
nShowCmd As Long) As Long
Sub Esegui(hForm As Form, NomeCmd As String, Param As String)
'hForm: nome finestra di origine (es: Main)
'NomeCmd: comando da eseguire
'     es: http:
www.pippo.com
'        oppure:  c:\pippo\peppe\documento.doc
'Param: eventuali parametri per la command line dell'eseguibile
    Dim x As Long
    If Param = "" Then Param = vbNullString
    ShellExecute hForm.hWnd, _
                 vbNullString, _
                 NomeCmd, _
                 Param, _
                 "", _
                 1
End Sub
--
-> GbC
http://www.chiappori.net
http://www.gbcweb.com


Puo' avere qualunque lunghezza.
Il programma a cui sto lavorando scandisce intere directory verificando se i
documenti trovati contengono determinate parole impostate in fase di
ricerca.
Se le trova memorizza il nome del file in un vettore.
Comunque adesso credo di aver capito il problema.
Quella funzione riesce a caricare anche file piu' grandi di 64Kb ma il text
box multilinea dove a volte vengono visualizzati, no!
Tanto per sfidare la vostra pazienza.... c'e' un modo per visualizzare piu'
di 64Kb di testo in qualcosa di simile ad un text editor?
ciao
Paolo B.


Ehm, non capisco bene cosa intendi.
Vuoi dire che la funzione shellexecute non e' piu' "consona" della normale
"shell"?
ciao
Paolo B.


Non e' che tu scrivevi anche su it.hobby.scacchi?
Il tuo nome non mi e' nuovo :-)
ciao
Paolo B.


Infatti: avevo avuto anch'io lo stesso dubbio, bentrovato!
Ti diro' di piu', proprio in questi giorni e' nato un thread sui siti
scacchistici in via di estinzione, e ci si rammaricava tra l'altro della
dipartita (spero temporanea) tuo bel motore di ricerca... anche "frengo"
voleva tue notizie :-)


 wrote in message
9i2flf$gei9s$2...@ID-78415.news.dfncis.de...

Probabilmente voleva sottintendere che in fondo Shell non e' che una
versione "castrata" di ShellExecute... comunque quest'ultima e' sicuramente
piu' adatta a quello che vuoi fare, dato che ti evita di dover passare per
"start ..." e quindi di vedere sfarfallare un prompt di DOS ogni volta


voglio dire che non ho mai usato la shell in vita mia



richText box.
Ciaotutti,
asterix

 voleva tue notizie :-)
Beh francesco il mio indirizzo email ce l'ha se ha bisogno di qualcosa, tipo
una ritoccatina al tio manager basta chiedere. :-)
Riguardo al motore di ricerca, uff, si l'ho mollato perche' l'avevo messo su
un server a pagamento e francamente non vedevo perche' dovevo essere l'unico
fesso a pagare per avere un sito quando ci sono tanti provider web gratuiti.
In realta' c'era un motivo per cui scelsi quel provider: permetteva l'uso di
programmi cgi scritti  in ansi C e visto che l'alternativa era il perl (che
disprezzo profondamente) mi sono dovuto rassegnare.
Ora pero', tornando in topic con questo ng, sto pensando se e' possibile col
vb creare scritp o programmi cgi che permettano l'interrogazione di un
database su un server.
Io il visual basic lo sto studiando solo da un mesetto, tu che sarai piu'
esperto che dici? Si puo' fare qualcosa del genere col vb?
ciao
Paolo B.



Capisco cosa intendi.
Anche a me non piace molto l'idea della shell.
Pero' fammi capire: tu non hai mai creato un programma che deve aprire un
programma con l'applicazione associata?
E se lo hai fatto, come lo hai realizzato senza usare la shell?
Perche' era quello che intendevo quando chiedevo se c'erano modi piu'
"consoni" per aprire un file.
ciao
Paolo B.

senza usare la shell?
Prova a leggere il mio post con l'esempio...
C'è scritto:
'NomeCmd: comando da eseguire
'     es: http:
www.pippo.com
'        oppure:  c:\pippo\peppe\documento.doc
Funziona anche se gli passi un "c:\pippo\peppe\documento.doc".
E qualsiasi estensione registrata.
machepostoafaresenonsileggequellocheposto?



Scusa ma avevo capito che tu non usavi neanche lo shellexecute e visto che
quell'esempio era basato su quella funzione pensavo intendessi un'altra cosa
ancora.
ciao
Paolo B.

No no...
L'esempio esegue tutto quello che vuoi, a patto che l'estensione sia
registrata...
A mio modo di vedere le cose è l'unico modo per affrontare la faccenda
delle shell e dei run esterni...
Oltretutto con due righe di codice (ed un paio di API) puoi anche
sospendere l'esecuzione finché la shell viene chiusa...


 esperto che dici? Si puo' fare qualcosa del genere col vb?
Si, anche se standard input e output non sono (ancora) supportati in maniera
nativa da VB si puo' fare con un paio di funzioni API; sul Sito Comune di
guesto NG (se gia non lo conosci e' 
http://www.it-lang-vb.net/
 ) c'e' un
esempio che fa al caso tuo, basta fare una ricerca per "CGI"...
Tra parentesi, e' proprio basandomi su un codice simile a quello
dell'esempio che sono riuscito a fare il mio motore compatibile Winboard i
VB ;-)
