Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.lang.visual-basic > #18677 > unrolled thread
| Started by | carmelo <carmelo.giu@alice.it> |
|---|---|
| First post | 2016-02-04 14:57 +0100 |
| Last post | 2016-02-04 18:07 +0100 |
| Articles | 11 — 5 participants |
Back to article view | Back to it.comp.lang.visual-basic
[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
| From | carmelo <carmelo.giu@alice.it> |
|---|---|
| Date | 2016-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]
| From | GbC <info@gbcdepot.com> |
|---|---|
| Date | 2016-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]
| From | carmelo <carmelo.giu@alice.it> |
|---|---|
| Date | 2016-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]
| From | Franz_aRTiglio <franzgol@N0SPAMtin.it> |
|---|---|
| Date | 2016-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]
| From | Luca D <antaniserse@yahoo.it> |
|---|---|
| Date | 2016-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]
| From | "salclem2" <salclem2@yahoo.it> |
|---|---|
| Date | 2016-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]
| From | "salclem2" <salclem2@yahoo.it> |
|---|---|
| Date | 2016-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]
| From | GbC <info@gbcdepot.com> |
|---|---|
| Date | 2016-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]
| From | carmelo <carmelo.giu@alice.it> |
|---|---|
| Date | 2016-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]
| From | GbC <info@gbcdepot.com> |
|---|---|
| Date | 2016-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]
| From | Franz_aRTiglio <franzgol@N0SPAMtin.it> |
|---|---|
| Date | 2016-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