Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.lang.visual-basic > #18677 > unrolled thread

[VB6] errore di runtime 5 solo su win XP

Started bycarmelo <carmelo.giu@alice.it>
First post2016-02-04 14:57 +0100
Last post2016-02-04 18:07 +0100
Articles 11 — 5 participants

Back to article view | Back to it.comp.lang.visual-basic


Contents

  [VB6] errore di runtime 5 solo su win XP carmelo <carmelo.giu@alice.it> - 2016-02-04 14:57 +0100
    Re: [VB6] errore di runtime 5 solo su win XP GbC <info@gbcdepot.com> - 2016-02-04 15:23 +0100
      Re: [VB6] errore di runtime 5 solo su win XP carmelo <carmelo.giu@alice.it> - 2016-02-04 17:49 +0100
        Re: [VB6] errore di runtime 5 solo su win XP Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2016-02-04 18:04 +0100
        Re: [VB6] errore di runtime 5 solo su win XP Luca D <antaniserse@yahoo.it> - 2016-02-04 10:16 -0800
        Re: [VB6] errore di runtime 5 solo su win XP "salclem2" <salclem2@yahoo.it> - 2016-02-04 19:38 +0100
          Re: [VB6] errore di runtime 5 solo su win XP "salclem2" <salclem2@yahoo.it> - 2016-02-04 19:39 +0100
        Re: [VB6] errore di runtime 5 solo su win XP GbC <info@gbcdepot.com> - 2016-02-05 11:05 +0100
          Re: [VB6] errore di runtime 5 solo su win XP carmelo <carmelo.giu@alice.it> - 2016-02-05 14:28 +0100
            Re: [VB6] errore di runtime 5 solo su win XP GbC <info@gbcdepot.com> - 2016-02-05 15:24 +0100
    Re: [VB6] errore di runtime 5 solo su win XP Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2016-02-04 18:07 +0100

#18677 — [VB6] errore di runtime 5 solo su win XP

Fromcarmelo <carmelo.giu@alice.it>
Date2016-02-04 14:57 +0100
Subject[VB6] errore di runtime 5 solo su win XP
Message-ID<n8vlbg$8c0$1@gioia.aioe.org>
Private Type OPENFILENAME
     lStructSize As Long
     hwndOwner As Long
     hInstance As Long
     lpstrFilter As String
     lpstrCustomFilter As String
     nMaxCustFilter As Long
     nFilterIndex As Long
     lpstrFile As String
     nMaxFile As Long
     lpstrFileTitle As String
     nMaxFileTitle As Long
     lpstrInitialDir As String
     lpstrTitle As String
     flags As Long
     nFileOffset As Integer
     nFileExtension As Integer
     lpstrDefExt As String
     lCustData As Long
     lpfnHook As Long
     lpTemplateName As String
End Type
Private OFName As OPENFILENAME

Dim FilePath As String
FilePath = Left$(OFName.lpstrFile, OFName.nFileOffset - 1)

Mi sapreste dire perchè la riga sopra, su Win XP mi da errore di runtime 
5: chiamata di routine o argomento non valido.

Mentre su Vista, Seven e win 8 funziona regolarmente.

Carmelo

[toc] | [next] | [standalone]


#18678

FromGbC <info@gbcdepot.com>
Date2016-02-04 15:23 +0100
Message-ID<n8vmsu$ckh$1@gioia.aioe.org>
In reply to#18677
Il 04/02/2016 14:57, carmelo ha scritto:
> Private Type OPENFILENAME
>      lStructSize As Long
>      hwndOwner As Long
>      hInstance As Long
>      lpstrFilter As String
>      lpstrCustomFilter As String
>      nMaxCustFilter As Long
>      nFilterIndex As Long
>      lpstrFile As String
>      nMaxFile As Long
>      lpstrFileTitle As String
>      nMaxFileTitle As Long
>      lpstrInitialDir As String
>      lpstrTitle As String
>      flags As Long
>      nFileOffset As Integer
>      nFileExtension As Integer
>      lpstrDefExt As String
>      lCustData As Long
>      lpfnHook As Long
>      lpTemplateName As String
> End Type
> Private OFName As OPENFILENAME
>
> Dim FilePath As String
> FilePath = Left$(OFName.lpstrFile, OFName.nFileOffset - 1)
>
> Mi sapreste dire perchè la riga sopra, su Win XP mi da errore di runtime
> 5: chiamata di routine o argomento non valido.
>
> Mentre su Vista, Seven e win 8 funziona regolarmente.
>
> Carmelo


A) Metti un breakpoint prima dell'istruzione incriminata e controlli il 
contenuto delle due stringhe.

debug.print "lpstrFile|" & OFName.lpstrFile & "|"
debug.print "nFileOffset|" & OFName.nFileOffset & "|"
stop
' riga esistente
FilePath = Left$(OFName.lpstrFile, OFName.nFileOffset - 1)

B) In alternativa aggiungi una messagebox che mostri il contenuto delle 
due stringhe, magari controllando con un parametro nella command-line se 
vuoi visualizzare i messaggi o no. Può anche essere utile in altri casi.

Setti una variabile globale booleana in un modulo .bas

global myDebugMODE as boolean

nel form di avvio (o quel che è) controlli se è stato attivato il debug, 
che si attiverà indicando come parametro nella commandline la parola -debug

if instr(1,command,"-debug",1) > 0 then myDebugMODE = true

(lo so che si può fare meglio ma per ora va bene lo stesso)

prima di eseguire la linea incriminata metti un

if myDebugMODE = True then
	MsgBox "lpstrFile|" & OFName.lpstrFile & "|" & vbnewline & _
	       "nFileOffset|" & OFName.nFileOffset & "|" , _
		vbinformation, _
		"myDebugMODE: FilePath"

end if

' riga esistente
FilePath = Left$(OFName.lpstrFile, OFName.nFileOffset - 1)


Così cosa è che genere quell'errore.

-- 
GbC
www.gbc.uno

[toc] | [prev] | [next] | [standalone]


#18680

Fromcarmelo <carmelo.giu@alice.it>
Date2016-02-04 17:49 +0100
Message-ID<n8vvfn$rnr$1@gioia.aioe.org>
In reply to#18678
Il 04/02/2016 15:23, GbC ha scritto:
> Il 04/02/2016 14:57, carmelo ha scritto:
>> Private Type OPENFILENAME
>>      lStructSize As Long
>>      hwndOwner As Long
>>      hInstance As Long
>>      lpstrFilter As String
>>      lpstrCustomFilter As String
>>      nMaxCustFilter As Long
>>      nFilterIndex As Long
>>      lpstrFile As String
>>      nMaxFile As Long
>>      lpstrFileTitle As String
>>      nMaxFileTitle As Long
>>      lpstrInitialDir As String
>>      lpstrTitle As String
>>      flags As Long
>>      nFileOffset As Integer
>>      nFileExtension As Integer
>>      lpstrDefExt As String
>>      lCustData As Long
>>      lpfnHook As Long
>>      lpTemplateName As String
>> End Type
>> Private OFName As OPENFILENAME
>>
>> Dim FilePath As String
>> FilePath = Left$(OFName.lpstrFile, OFName.nFileOffset - 1)
>>
>> Mi sapreste dire perchè la riga sopra, su Win XP mi da errore di runtime
>> 5: chiamata di routine o argomento non valido.
>>
>> Mentre su Vista, Seven e win 8 funziona regolarmente.
>>
>> Carmelo
>
>
> A) Metti un breakpoint prima dell'istruzione incriminata e controlli il
> contenuto delle due stringhe.
>
> debug.print "lpstrFile|" & OFName.lpstrFile & "|"
> debug.print "nFileOffset|" & OFName.nFileOffset & "|"
> stop
> ' riga esistente
> FilePath = Left$(OFName.lpstrFile, OFName.nFileOffset - 1)
>
> B) In alternativa aggiungi una messagebox che mostri il contenuto delle
> due stringhe, magari controllando con un parametro nella command-line se
> vuoi visualizzare i messaggi o no. Può anche essere utile in altri casi.
>
> Setti una variabile globale booleana in un modulo .bas
>
> global myDebugMODE as boolean
>
> nel form di avvio (o quel che è) controlli se è stato attivato il debug,
> che si attiverà indicando come parametro nella commandline la parola -debug
>
> if instr(1,command,"-debug",1) > 0 then myDebugMODE = true
>
> (lo so che si può fare meglio ma per ora va bene lo stesso)
>
> prima di eseguire la linea incriminata metti un
>
> if myDebugMODE = True then
>      MsgBox "lpstrFile|" & OFName.lpstrFile & "|" & vbnewline & _
>             "nFileOffset|" & OFName.nFileOffset & "|" , _
>          vbinformation, _
>          "myDebugMODE: FilePath"
>
> end if
>
> ' riga esistente
> FilePath = Left$(OFName.lpstrFile, OFName.nFileOffset - 1)
>
>
> Così cosa è che genere quell'errore.
>
Ho provato cosi:
Dim FilePath As String, iPos as Integer
iPos = (OFName.nFileOffset - 1) ==== > questa riga da errore
FilePath = Left$(OFName.lpstrFile, iPos)

L'errore lo genera OFName.nFileOffset
solo in win XP perchè?

Carmelo

[toc] | [prev] | [next] | [standalone]


#18681

FromFranz_aRTiglio <franzgol@N0SPAMtin.it>
Date2016-02-04 18:04 +0100
Message-ID<n9007o$tqk$1@gioia.aioe.org>
In reply to#18680
Il 04/02/2016, carmelo ha detto :

>>       nFileOffset As Integer

Prova a dichiararla come variant, sospetto che in alcuni casi
restituisca un "null" che non può essere infilato in un integer.

[toc] | [prev] | [next] | [standalone]


#18683

FromLuca D <antaniserse@yahoo.it>
Date2016-02-04 10:16 -0800
Message-ID<1cdffe34-990b-4499-be9d-91fe33d73ef0@googlegroups.com>
In reply to#18680
On Thursday, February 4, 2016 at 5:50:05 PM UTC+1, carmelo wrote:
> Il 04/02/2016 15:23, GbC ha scritto:
> > Il 04/02/2016 14:57, carmelo ha scritto:
> >> Private Type OPENFILENAME
> >>      lStructSize As Long
> >>      hwndOwner As Long
> >>      hInstance As Long
> >>      lpstrFilter As String
> >>      lpstrCustomFilter As String
> >>      nMaxCustFilter As Long
> >>      nFilterIndex As Long
> >>      lpstrFile As String
> >>      nMaxFile As Long
> >>      lpstrFileTitle As String
> >>      nMaxFileTitle As Long
> >>      lpstrInitialDir As String
> >>      lpstrTitle As String
> >>      flags As Long
> >>      nFileOffset As Integer
> >>      nFileExtension As Integer
> >>      lpstrDefExt As String
> >>      lCustData As Long
> >>      lpfnHook As Long
> >>      lpTemplateName As String
> >> End Type
> >> Private OFName As OPENFILENAME
> >>
> >> Dim FilePath As String
> >> FilePath = Left$(OFName.lpstrFile, OFName.nFileOffset - 1)
> >>
> >> Mi sapreste dire perchè la riga sopra, su Win XP mi da errore di runtime
> >> 5: chiamata di routine o argomento non valido.
> >>
> >> Mentre su Vista, Seven e win 8 funziona regolarmente.
> >>
> >> Carmelo
> >
> >
> > A) Metti un breakpoint prima dell'istruzione incriminata e controlli il
> > contenuto delle due stringhe.
> >
> > debug.print "lpstrFile|" & OFName.lpstrFile & "|"
> > debug.print "nFileOffset|" & OFName.nFileOffset & "|"
> > stop
> > ' riga esistente
> > FilePath = Left$(OFName.lpstrFile, OFName.nFileOffset - 1)
> >
> > B) In alternativa aggiungi una messagebox che mostri il contenuto delle
> > due stringhe, magari controllando con un parametro nella command-line se
> > vuoi visualizzare i messaggi o no. Può anche essere utile in altri casi.
> >
> > Setti una variabile globale booleana in un modulo .bas
> >
> > global myDebugMODE as boolean
> >
> > nel form di avvio (o quel che è) controlli se è stato attivato il debug,
> > che si attiverà indicando come parametro nella commandline la parola -debug
> >
> > if instr(1,command,"-debug",1) > 0 then myDebugMODE = true
> >
> > (lo so che si può fare meglio ma per ora va bene lo stesso)
> >
> > prima di eseguire la linea incriminata metti un
> >
> > if myDebugMODE = True then
> >      MsgBox "lpstrFile|" & OFName.lpstrFile & "|" & vbnewline & _
> >             "nFileOffset|" & OFName.nFileOffset & "|" , _
> >          vbinformation, _
> >          "myDebugMODE: FilePath"
> >
> > end if
> >
> > ' riga esistente
> > FilePath = Left$(OFName.lpstrFile, OFName.nFileOffset - 1)
> >
> >
> > Così cosa è che genere quell'errore.
> >
> Ho provato cosi:
> Dim FilePath As String, iPos as Integer
> iPos = (OFName.nFileOffset - 1) ==== > questa riga da errore
> FilePath = Left$(OFName.lpstrFile, iPos)
> 
> L'errore lo genera OFName.nFileOffset
> solo in win XP perchè?
> 
> Carmelo

Così per curiosita', hai provato ad inizializzare esplicitamente a zero tutti i campi integer/long di quella struttura subito dopo aver dichiarato OFName? 

[toc] | [prev] | [next] | [standalone]


#18684

From"salclem2" <salclem2@yahoo.it>
Date2016-02-04 19:38 +0100
Message-ID<n905qc$18ai$1@gioia.aioe.org>
In reply to#18680
"carmelo" <carmelo.giu@alice.it> nel suo ultimo post si è così espresso:
Prova così
iPos = (OFName.nFileOffset - 1!) ==== > questa riga da errore (punto esclamativo, o #)





-- 
http://freewarewiki.it
http://freewareonline.org
http://netuser.altervista.org

[toc] | [prev] | [next] | [standalone]


#18685

From"salclem2" <salclem2@yahoo.it>
Date2016-02-04 19:39 +0100
Message-ID<n905tm$18fn$1@gioia.aioe.org>
In reply to#18684
> "carmelo" <carmelo.giu@alice.it> nel suo ultimo post si è così espresso:
o meglio con il 1&
>



-- 
http://freewarewiki.it
http://freewareonline.org
http://netuser.altervista.org

[toc] | [prev] | [next] | [standalone]


#18686

FromGbC <info@gbcdepot.com>
Date2016-02-05 11:05 +0100
Message-ID<n91s5b$1igc$1@gioia.aioe.org>
In reply to#18680
Il 04/02/2016 17:49, carmelo ha scritto:
[snip]
> L'errore lo genera OFName.nFileOffset
> solo in win XP perchè?

Ma tu lo sai o no cosa c'è in quel c@##o di variabile?
E se non lo sai che fai, vai a caso?

E poi... I sistemi su cui funziona sono x86 o x64?


-- 
GbC
www.gbc.uno

[toc] | [prev] | [next] | [standalone]


#18687

Fromcarmelo <carmelo.giu@alice.it>
Date2016-02-05 14:28 +0100
Message-ID<n9282k$8ep$1@gioia.aioe.org>
In reply to#18686
Il 05/02/2016 11:05, GbC ha scritto:
> Il 04/02/2016 17:49, carmelo ha scritto:
> [snip]
>> L'errore lo genera OFName.nFileOffset
>> solo in win XP perchè?
>
> Ma tu lo sai o no cosa c'è in quel c@##o di variabile?
> E se non lo sai che fai, vai a caso?
>
> E poi... I sistemi su cui funziona sono x86 o x64?
>
>
OFName.nFileOffset restituisce il numero di caratteri compresi tra 1 e 
l'ultimo "\". Cioè il path completo prima del nome del file.
Es: C:\programmi\prova.txt

OFName.nFileOffset restituisce 13

Carmelo

[toc] | [prev] | [next] | [standalone]


#18688

FromGbC <info@gbcdepot.com>
Date2016-02-05 15:24 +0100
Message-ID<n92bbb$f4a$1@gioia.aioe.org>
In reply to#18687
Il 05/02/2016 14:28, carmelo ha scritto:
> Il 05/02/2016 11:05, GbC ha scritto:
>> Il 04/02/2016 17:49, carmelo ha scritto:
>> [snip]
>>> L'errore lo genera OFName.nFileOffset
>>> solo in win XP perchè?
>>
>> Ma tu lo sai o no cosa c'è in quel c@##o di variabile?
>> E se non lo sai che fai, vai a caso?
>>
>> E poi... I sistemi su cui funziona sono x86 o x64?
>>
>>
> OFName.nFileOffset restituisce il numero di caratteri compresi tra 1 e
> l'ultimo "\". Cioè il path completo prima del nome del file.
> Es: C:\programmi\prova.txt
>
> OFName.nFileOffset restituisce 13
>
> Carmelo

Grazie per la spiegazione, ma ci arrivavo da solo. ^^

Intendevo dire durante l'esecuzione del programma: è evidente che in 
ambienti diversi il valore ottenuto è diverso (e quindi che quello che 
hai detto nella risposta NON È VERO: non viene sempre riportata la 
lunghezza del percorso del file, tanto è che si genera un errore) ed è 
quindi indispensabile conoscere il valore della variabile SUBITO PRIMA 
che si generi l'errore. Cioè sapere cosa il SO mette in quella variabile.

Se vuoi azzardo una ipotesi. È 0 (o forse null) e left("AAA",-1) genera 
un syntax error. Ma finché non siamo sicuri non c'è modo di affermarlo 
con certezza.

Fatto sta che il valore riportato non è coerente.

Ho un sospetto. Le API per i sistemi a 64 bit sono diverse da quelle per 
i sitemi a 32. Si deve inserire uno pseudocodice per distinguere quale 
funzione utilizzare in funzione del SO host. Per questo ho domandato

 >> E poi... I sistemi su cui funziona sono x86 o x64?

Ci persi del tempo con una funzione per ridimensionare l'altezza delle 
liste delle combobox, che non riuscivo a variare sui sistemi a 64 bit. E 
quando ho sistemato su macchine x64 non funzionava più sui vecchi XP x86.


-- 
GbC
www.gbc.uno

[toc] | [prev] | [next] | [standalone]


#18682

FromFranz_aRTiglio <franzgol@N0SPAMtin.it>
Date2016-02-04 18:07 +0100
Message-ID<n900d2$u2b$1@gioia.aioe.org>
In reply to#18677
Il 04/02/2016, carmelo ha detto :


>       nFileOffset As Integer

Prova a dichiararla come variant, sospetto che in alcuni casi
restituisca un "null" che non può essere infilato in un integer.

[toc] | [prev] | [standalone]


Back to top | Article view | it.comp.lang.visual-basic


csiph-web