PDA

View Full Version : Visual C++ 2008 errore in debug


Andy1984
15-07-2010, 08:58
Ciao a tutti! Sto realizzando un form (C++/cli) con visual. Ho un problema in debug. Ovvero quando clicco sul pulsante "Open..." per aprire un file excel (ho utilizzato l'interop della microsoft) mi si aprono le directory, scelgo il file d aprire, arriva ad un certo punto e poi mi da il messaggio che mi dice impossibile aprire il file (in pratica non mi riesce a caricare il file ovvero non esegue le istruzioni del codice che ho scritto io). In debug mi da questa eccezione:

Eccezione first-chance di tipo 'System.NullReferenceException'.

Cosa vuol dire?

Grazie in anticipo

tomminno
15-07-2010, 09:20
In debug mi da questa eccezione:

Eccezione first-chance di tipo 'System.NullReferenceException'.

Cosa vuol dire?

Grazie in anticipo

Vuol dire che stai cercando di usare un riferimento non impostato.
Hai provato in debug a capire quando e come ti ritrovi con una referenza nulla?

Andy1984
15-07-2010, 09:49
Adesso invece mi dice questo:


Eccezione non gestita di tipo 'System.Runtime.InteropServices.COMException' in OTvsIntData.exe

Informazioni aggiuntive: Impossibile trovare ''. Controllare l'ortografia del nome del file e verificare che la posizione del file sia corretta.

Se si sta tentando di aprire il file dall'elenco dei file più recenti, assicurarsi che il file non sia stato rinominato, spostato o eliminato.

Riguarda sempre il problema di prima?

Grazie Tomminno, sei sempre disponibile :)

Andy1984
15-07-2010, 09:56
No ok avevo sbagliato ad aprire l'interop!

Ora mi da sempre il problema iniziale.

Da cosa può dipendere?

Andy1984
15-07-2010, 09:58
Vuol dire che stai cercando di usare un riferimento non impostato.
Hai provato in debug a capire quando e come ti ritrovi con una referenza nulla?
La referenza nulla me la trovo nel file .exe...

Andy1984
15-07-2010, 10:11
La referenza nulla me la trovo nel file .exe...

ed anche in mscorlib.dll

tomminno
15-07-2010, 10:26
ed anche in mscorlib.dll

:confused:
Da qualche parte una tua variabile deve essere nulla, dovresti avere lo stack trace che ti aiuta a capire dove nasce il problema.

Andy1984
15-07-2010, 12:58
:confused:
Da qualche parte una tua variabile deve essere nulla, dovresti avere lo stack trace che ti aiuta a capire dove nasce il problema.
Ma è possibile che lo stack di chiamate sia vuoto? Vengono visualizzate solo l'output ed i moduli. Come fa ad essere vuoto lo stack di chiamate?

tomminno
15-07-2010, 13:08
Cosa ti restituisce il ToString dell'eccezione?

Andy1984
15-07-2010, 13:26
Cosa ti restituisce il ToString dell'eccezione?

Scusami ma non capisco cosa vuoi dire...

Nella finestra degli output mi da questo messaggio:


'OTvsIntData.exe' (gestito): caricato 'C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll'
'OTvsIntData.exe' (gestito): caricato 'c:\Documents and Settings\Andrea\Documenti\Visual Studio 2008\Projects\Project1\OTvsIntData\Debug\OTvsIntData.exe', simboli caricati.
'OTvsIntData.exe' (gestito): caricato 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcm90d.dll'
'OTvsIntData.exe' (gestito): caricato 'C:\WINDOWS\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll'
'OTvsIntData.exe' (gestito): caricato 'C:\WINDOWS\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll'
'OTvsIntData.exe' (gestito): caricato 'C:\WINDOWS\assembly\GAC_MSIL\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll'
'OTvsIntData.exe' (gestito): caricato 'C:\WINDOWS\assembly\GAC_MSIL\System.Windows.Forms.resources\2.0.0.0_it_b77a5c561934e089\System.Windows.Forms.resources.dll'
'OTvsIntData.exe' (gestito): caricato 'c:\Documents and Settings\Andrea\Documenti\Visual Studio 2008\Projects\Project1\OTvsIntData\Debug\Interop.Microsoft.Office.Interop.Excel.dll.1.6.dll'
'OTvsIntData.exe' (gestito): caricato 'C:\WINDOWS\assembly\GAC_MSIL\mscorlib.resources\2.0.0.0_it_b77a5c561934e089\mscorlib.resources.dll'
Eccezione first-chance di tipo 'System.NullReferenceException' in OTvsIntData.exe
Eccezione first-chance di tipo 'System.NullReferenceException' in OTvsIntData.exe
Eccezione first-chance di tipo 'System.NullReferenceException' in mscorlib.dll

e nella finestra dei moduli :
mscorlib.dll C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll Sì N/A Impossibile trovare o aprire il file PDB. 1 2.0.50727.3603 (GDR.050727-3600) 08/08/2009 3.46 790C0000-79BB7000 [3176] OTvsIntData.exe: Gestito
OTvsIntData.exe c:\Documents and Settings\Andrea\Documenti\Visual Studio 2008\Projects\Project1\OTvsIntData\Debug\OTvsIntData.exe No N/A Simboli caricati. c:\Documents and Settings\Andrea\Documenti\Visual Studio 2008\Projects\Project1\OTvsIntData\Debug\OTvsIntData.pdb 2 15/07/2010 11.18 00400000-00416000 [3176] OTvsIntData.exe: Gestito
msvcm90d.dll C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcm90d.dll No N/A Impossibile trovare o aprire il file PDB. 3 9.00.30729.1 29/07/2008 12.54 10000000-10059000 [3176] OTvsIntData.exe: Gestito
System.dll C:\WINDOWS\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll Sì N/A Impossibile trovare o aprire il file PDB. 4 2.0.50727.3614 (GDR.050727-3600) 23/03/2010 8.01 7A440000-7ABD8000 [3176] OTvsIntData.exe: Gestito
System.Windows.Forms.dll C:\WINDOWS\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll Sì N/A Impossibile trovare o aprire il file PDB. 5 2.0.50727.3053 (netfxsp.050727-3000) 25/07/2008 16.10 7AFD0000-7BBAE000 [3176] OTvsIntData.exe: Gestito
System.Drawing.dll C:\WINDOWS\assembly\GAC_MSIL\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll Sì N/A Impossibile trovare o aprire il file PDB. 6 2.0.50727.3053 (netfxsp.050727-3000) 25/07/2008 16.10 7ADE0000-7AF68000 [3176] OTvsIntData.exe: Gestito
System.Windows.Forms.resources.dll C:\WINDOWS\assembly\GAC_MSIL\System.Windows.Forms.resources\2.0.0.0_it_b77a5c561934e089\System.Windows.Forms.resources.dll No N/A Nessun simbolo caricato. 7 2.0.50727.3053 (netfxsp.050727-3000) 26/07/2008 9.09 032F0000-0335C000 [3176] OTvsIntData.exe: Gestito
Interop.Microsoft.Office.Interop.Excel.dll.1.6.dll c:\Documents and Settings\Andrea\Documenti\Visual Studio 2008\Projects\Project1\OTvsIntData\Debug\Interop.Microsoft.Office.Interop.Excel.dll.1.6.dll No N/A Nessun simbolo caricato. 8 1.6.0.0 14/07/2010 16.49 03CE0000-03E1A000 [3176] OTvsIntData.exe: Gestito
mscorlib.resources.dll C:\WINDOWS\assembly\GAC_MSIL\mscorlib.resources\2.0.0.0_it_b77a5c561934e089\mscorlib.resources.dll No N/A Nessun simbolo caricato. 9 2.0.50727.3053 (netfxsp.050727-3000) 26/07/2008 10.03 05140000-0518E000 [3176] OTvsIntData.exe: Gestito

OTvsIntData è il nome del progetto.

tomminno
15-07-2010, 13:39
Ma hai o no un'eccezione nel tuo programma?

Il first-chance exception ce l'hai nel momento in cui viene sollevata un'eccezione, solo nel caso in cui non sia gestita (second-chance exception) ottieni un errore,altrimenti significa che c'è un catch da qualche parte che ti gestisce l'errore che vedi nell'output.

Andy1984
15-07-2010, 14:27
Allora ho riscritto il codice utilizzando la libreria xlsstream e funziona. Io però voglio utilizzarel'Interop della microsoft ma con questo non mi funziona(mistero). Non è che avresti un esempio di codice dell'evento click di un pulsante che apre in particolare un file excel (Microsoft.Office.Interop.excel.dll) ?

tomminno
15-07-2010, 15:23
Allora ho riscritto il codice utilizzando la libreria xlsstream e funziona. Io però voglio utilizzarel'Interop della microsoft ma con questo non mi funziona(mistero). Non è che avresti un esempio di codice dell'evento click di un pulsante che apre in particolare un file excel (Microsoft.Office.Interop.excel.dll) ?

Mai realizzato una cosa simile mi dispiace.
Dovresti cercare di capire cosa non ti funziona e anche come mai non ti funziona, ovvero se nel tuo programma ci sono eccezioni o errori vari.
Ma questo te lo può dire il debug passo passo del tuo programma.

astorcas
16-07-2010, 14:28
dovresti dare qualche informazione in più, qual'è la riga di codice che ti genera l'eccezione?

Andy1984
16-07-2010, 14:43
dovresti dare qualche informazione in più, qual'è la riga di codice che ti genera l'eccezione?

Ciao grazie per il tuo intervento.

Dalla finestra dell'output di debug c'è scritto:
Eccezione first-chance di tipo 'System.NullReferenceException' in OTvsIntData.exe
Eccezione first-chance di tipo 'System.NullReferenceException' in OTvsIntData.exe

Per vedere la riga di codice che mi genera l'eccezione non so come si fa a vedere. Anche perchè non vengono visualizzati neanche gli stack di chiamate.

astorcas
16-07-2010, 14:46
prova dal menu di vs2008 ad andare in Debug->Exception e nella colonna thrown spunta tutto, poi fai ripartire il programma e ne riparliamo ;)

Andy1984
16-07-2010, 14:53
prova dal menu di vs2008 ad andare in Debug->Exception e nella colonna thrown spunta tutto, poi fai ripartire il programma e ne riparliamo ;)

Ho fatto. Allora adesso mi ha dato anche il messaggio e la riga di codice dove c'è l'eccezione (che ancora non ho capito cosa vuol dire di preciso:( ).

Eccezione first-chance di tipo 'System.NullReferenceException' in OTvsIntData.exe

Informazioni aggiuntive: Riferimento a un oggetto non impostato su un'istanza di oggetto.

Cosa vuol dire?

astorcas
16-07-2010, 14:56
Ho fatto. Allora adesso mi ha dato anche il messaggio e la riga di codice dove c'è l'eccezione (che ancora non ho capito cosa vuol dire di preciso:( ).

Eccezione first-chance di tipo 'System.NullReferenceException' in OTvsIntData.exe

Informazioni aggiuntive: Riferimento a un oggetto non impostato su un'istanza di oggetto.

Cosa vuol dire?

Vuol dire che cerchi di accedere ad un oggetto che è null in poche parole, su scrivi la riga di codice :D

Andy1984
16-07-2010, 15:02
Vuol dire che cerchi di accedere ad un oggetto che è null in poche parole, su scrivi la riga di codice :D

Ah è vero...scusa! Eccolo:

while (true)
{
try {
Temp = (static_cast<Microsoft::Office::Interop::Excel::Range^>(ws->Cells[(14+k).ToString(), "C"]))->Value2->ToString();
S_Part->SetValue(RemSpace(RemSlashN(Temp)),k);
}
catch(...)
{
break;
}
k++;
}
k = 0;

Quella in grassetto è quella che ha l'eccezione. In pratica questo ciclo while scansiona tutta la colonna C di un file Excel e ne legge il contenuto.

astorcas
16-07-2010, 15:07
mmm ottimo, dunque potrebbe essere null di tutto là dentro :D!
Dovresti verificare se è null:

ws

ws->Cells[(14+k).ToString(), "C"]

oppure

ws->Cells[(14+k).ToString(), "C"]))->Value2

Sei in grado di farlo? :) (Ad esempio se non erro durante il debug una lineetta punta proprio sull'oggetto che lancia l'eccezione, ma non sono sicuro)

Andy1984
16-07-2010, 15:15
mmm ottimo, dunque potrebbe essere null di tutto là dentro :D!
Dovresti verificare se è null:

ws

ws->Cells[(14+k).ToString(), "C"]

oppure

ws->Cells[(14+k).ToString(), "C"]))->Value2

Sei in grado di farlo? :) (Ad esempio se non erro durante il debug una lineetta punta proprio sull'oggetto che lancia l'eccezione, ma non sono sicuro)

Allora... Quando lancio il debug c'è un freccetta gialla che punta alla riga di codice dove c'è l'eccezione.
Per vedere cosa è Null come faccio? Non è che posso spezzettare il codice!
Non lo so come si fa.:doh: :doh: :doh: :doh: :doh:

astorcas
16-07-2010, 15:23
si lo so,ti sto facendo fare cose ridicole hai ragione, però mi sembra che tu non sia ferratissimo con visual studio e sto cercando di inventarmi strade alternative ;).... premettendo che credo che il tuo problema sia che non riesci ad instanziare l'oggetto COM dovresti aggiungere del codice per verificare che quei 3 oggetti non siano null, oppure piazzi un breakpoint sulla linea e passi col mouse sopra le variabili per vedere quale è null. Scusami ma non sono molto bravo a spiegarmi :P

Andy1984
16-07-2010, 15:31
si lo so,ti sto facendo fare cose ridicole hai ragione, però mi sembra che tu non sia ferratissimo con visual studio e sto cercando di inventarmi strade alternative ;).... premettendo che credo che il tuo problema sia che non riesci ad instanziare l'oggetto COM dovresti aggiungere del codice per verificare che quei 3 oggetti non siano null, oppure piazzi un breakpoint sulla linea e passi col mouse sopra le variabili per vedere quale è null. Scusami ma non sono molto bravo a spiegarmi :P

Astorcas sei un grande! Si io è da poco che sto combattendo con Visual! Però non voglio che vinca lui!:)

Allora la variabile Null è k. Quindi il problema è questa maledetta variabile! Ora ci lavoro e vedo perchè! Poi ti faccio sapere appena ho novità! Grazie mille spero di avere ancora il tuo supporto in futuro nel caso in cui ne avrò bisogno. Sempre se ti va...:)

astorcas
16-07-2010, 15:34
Astorcas sei un grande! Si io è da poco che sto combattendo con Visual! Però non voglio che vinca lui!:)

Allora la variabile Null è k. Quindi il problema è questa maledetta variabile! Ora ci lavoro e vedo perchè! Poi ti faccio sapere appena ho novità! Grazie mille spero di avere ancora il tuo supporto in futuro nel caso in cui ne avrò bisogno. Sempre se ti va...:)

mmmm c'è un problema, se k è di tipo int, double, decimal ecc... (insomma un ValueType) non può essere null, guarda meglio! :D

Andy1984
16-07-2010, 15:37
mmmm c'è un problema, se k è di tipo int, double, decimal ecc... (insomma un ValueType) non può essere null, guarda meglio! :D

K è un int ed è inizializzata a zero. Quindi può darsi che non mi itera e quindi rimane a zero...???

astorcas
16-07-2010, 15:43
no è impossibile che sia quello il problema, prova a mettere prima del while qualcosa tipo:


if(ws == null) throw gcnew Exception("ws è null");

if(ws->Cells[(14).ToString(), "C"] == null) throw gcnew Exception("ws->Cells[(14).ToString(), "C"] è null");

Andy1984
19-07-2010, 09:45
no è impossibile che sia quello il problema, prova a mettere prima del while qualcosa tipo:


if(ws == null) throw gcnew Exception("ws è null");

if(ws->Cells[(14).ToString(), "C"] == null) throw gcnew Exception("ws->Cells[(14).ToString(), "C"] è null");

Ciao Astorcas! Rieccomi qui.:.:doh:
Sto provando a risolvere sempre il famoso problema ed ho provato anche a fare come dici te mettendo gli IF prima del while ma mi da sempre gli stessi errori.

Ma non è che il problema sia nel fatto che la variabile k è inizializzata a zero. Poi viene richiamata in questo while ed in una funzione ma rimane a zero perchè non itera e quindi mi da l'eccezione Null? Di seguito codice del while ed a seguire codice della funzione.

While:

while (true)
{
try {
Temp = (static_cast<Microsoft::Office::Interop::Excel::Range^>(ws->Cells[(14+k).ToString(), "C"]))->Value2->ToString();
S_Part->SetValue(RemSpace(RemSlashN(Temp)),k);
}
catch(...)
{
break;
}
k++;
}
k = 0;

Funzione:

void GetSheetRange_OT(System::String^ otPath)
{
int k = 0;
try
{
Microsoft::Office::Interop::Excel::Application^ xlsApp = gcnew Microsoft::Office::Interop::Excel::ApplicationClass();
xlsApp->Visible = false;
System::Object^ xlsMissing = System::Reflection::Missing::Value;
Workbook^ wb = xlsApp->Workbooks->Open(otPath, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing);

Microsoft::Office::Interop::Excel::Worksheet^ ws;
OtSheetNum = wb->Sheets->Count-1;
for each(ws in wb->Worksheets)
{
OtRange->SetValue(ws->Name,k);
k++;
}
wb->Close(false, otPath, xlsMissing);
xlsApp->Quit();
GC::Collect();
GC::WaitForPendingFinalizers();
}
catch(...)
{
MessageBox::Show("Impossibile aprire il file:\n"+otPath, "Error", MessageBoxButtons::OK, MessageBoxIcon::Error);
}
:help: :help: :help: :doh: :doh: :doh: :doh: :doh:

Andy1984
22-07-2010, 08:44
astorcas .....:help: :help: :help: :help: :help: :help: :help: :help: :help: :)

astorcas
22-07-2010, 08:50
quei due if erano un modo farlocco per farti capire quale oggetto era null. C'è uno dei due if che lancia eccezione? Allora hai trovato l'oggetto null! :)

Andy1984
22-07-2010, 09:01
quei due if erano un modo farlocco per farti capire quale oggetto era null. C'è uno dei due if che lancia eccezione? Allora hai trovato l'oggetto null! :)

il problema è che quando scrivo il secondo if che mi hai consigliato mi da l'errore che non è identificato C (che sarebbe la colonna del file excel letta con l'interop). E per tutti e due gli if ho il problema della variabile null, la devo mettere a zero? Ovvero int null = 0;?

astorcas
22-07-2010, 09:09
scusa errore mio, prova così



if(ws == null) throw gcnew Exception("ws è null");

if(ws->Cells[(14).ToString(), "C"] == null) throw gcnew Exception("ws->Cells[(14).ToString(), \"C\"] è null");

Andy1984
22-07-2010, 09:24
scusa errore mio, prova così



if(ws == null) throw gcnew Exception("ws è null");

if(ws->Cells[(14).ToString(), "C"] == null) throw gcnew Exception("ws->Cells[(14).ToString(), \"C\"] è null");


Allora... se inserisco il primo if mi dice che non è possibile convertire ws in un int (perchè io ho messo int null = 0; e non so se è giusto).

Inserendo il secondo if mi dice che l'eccezione si trova nel file OTvsIntData.cpp e punta al return 0.

Di seguito il codice del .cpp:
// OTvsIntData.cpp : file di progetto principale.

#include "stdafx.h"
#include "Form1.h"

using namespace OTvsIntData;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Attivare gli effetti visivi di Windows XP prima di creare i controlli
System::Windows::Forms::Application::EnableVisualStyles();
System::Windows::Forms::Application::SetCompatibleTextRenderingDefault(false);
// Creare la finestra principale ed eseguirla
System::Windows::Forms::Application::Run(gcnew Form1());
return 0;
}

Andy1984
22-07-2010, 10:35
Ciao a tutti! Volevo sapere come gestire questo tipo di errore in debug e come si potrebbe risolvere.

astorcas
22-07-2010, 10:40
Ciao a tutti! Volevo sapere come gestire questo tipo di errore in debug e come si potrebbe risolvere.

scusami ma sono rincoglionito io, al posto di null ci va nullptr. Sorry

Andy1984
22-07-2010, 10:54
scusami ma sono rincoglionito io, al posto di null ci va nullptr. Sorry

No non ti preoccupare...ci mancherebbe!

Allora adesso la famosa freccetta punta al secondo if. Quindi l'eccezione è li?!

Che significa? Che legge un contenuto della cella del file excel vuota? :confused: :rolleyes:

astorcas
22-07-2010, 11:34
No non ti preoccupare...ci mancherebbe!

Allora adesso la famosa freccetta punta al secondo if. Quindi l'eccezione è li?!

Che significa? Che legge un contenuto della cella del file excel vuota? :confused: :rolleyes:

se ti dà come messaggio "ws->Cells[(14).ToString(), \"C\"] è null" allora si, molto probabilmente non è il modo corretto di accedere al valore delle celle, stai seguendo un tutorial in merito?

Andy1984
22-07-2010, 11:43
se ti dà come messaggio "ws->Cells[(14).ToString(), \"C\"] è null" allora si, molto probabilmente non è il modo corretto di accedere al valore delle celle, stai seguendo un tutorial in merito?

A diti la verità avevo trovato all'inizio quando avevo cominciato a scrivere il codice un tutorial sull'interop. Ma poi me lo sono perso e non sono più riuscito a trovarlo in rete. Te ne avresti uno? Oppure potresti consigliarmi un link?

Però mi sembra strano perchè per gli altri pulsanti ho utilizzato la stessa metodologia e mi funziona. Misteri dell'informatica! Hai visto il mio avatar??:D

Andy1984
22-07-2010, 12:15
Astorcas forse ho capito il problema!

Allora ho tolto il while (true) ed ho inserito solo il try-catch per vedere se mi leggeva il primo elemento del file excel. Infatti la variabile Temp mi da il valore che mi serve.

A questo punto il problema sta nel while. Se io inserisco while(true) che significa? Che mi k itera fino a quando?

Ho provato anche ad inserire while(k <= 100) ma da sempre lo stesso problema! Secondo te come potrei fare? Hai qualche idea?

astorcas
22-07-2010, 13:33
Astorcas forse ho capito il problema!

Allora ho tolto il while (true) ed ho inserito solo il try-catch per vedere se mi leggeva il primo elemento del file excel. Infatti la variabile Temp mi da il valore che mi serve.

A questo punto il problema sta nel while. Se io inserisco while(true) che significa? Che mi k itera fino a quando?

Ho provato anche ad inserire while(k <= 100) ma da sempre lo stesso problema! Secondo te come potrei fare? Hai qualche idea?

prova a togliere i due if che ti ho dato che ora non servono più e modifica il codice così:


while (true)
{
try {
Microsoft:Office::Interop::Excel::Range^ r = (static_cast<Microsoft:ffice::Interop::Excel::Range^>(ws->Cells[(14+k).ToString(), "C"]));
if(r == nullptr) break;
Temp =r->Value2->ToString();
.... resto uguale....


non è il massimo ma potrebbe andare

Andy1984
23-07-2010, 08:36
No così non va ma ho capito il problema qual'è!

In realtà ho due cicli while e sono questi:

//Temp = "Pippo";
while(true)
{
try {
Temp = (static_cast<Microsoft::Office::Interop::Excel::Range^>(ws->Cells[(14+k).ToString(), "C"]))->Value2->ToString();
S_Part->SetValue(RemSpace(RemSlashN(Temp)),k);
}
catch(...)
{
break;
}
k++;
}
k = 0;
//Lettura Segnali di Protezione
//Temp = "Pippo";
while(true)
{
try {
Temp = (static_cast<Microsoft::Office::Interop::Excel::Range^>(ws->Cells[(14+k).ToString(), "L"]))->Value2->ToString();
S_Prot->SetValue(RemSpace(RemSlashN(Temp)),k);
}
catch(...)
{
break;
}
k++;
}
k = 0;

//Temp = "Pippo";

Ora il problema è nella variabile Temp (che è di tipo stringa). Succede questo:
Quando inizia ad iterare k parte da zero e Temp ha un valore indefinito. Poi K=1 e Temp assume il valore della prima cella da leggere nel file excel. Poi k=2, 3 , 4 ecc... fino a quando non arriva alla fine della colonna C e li c'è l'eccezione Null. Dopo (l'ho provato in debug mettendo i punti di interruzione) , quando passa al secondo while succede la stessa cosa.

Secondo me è una cavolata ma che non riesco a vedere... :doh:

Andy1984
23-07-2010, 12:40
Il problema dei due while l'ho risolto! Mi è rimasto solo quello della funzione posto il codice. Mi esce dal try e mi stampa il messaggio del catch non capisco perchè è come se anche qui ci fosse un eccezione null.

void GetSheetRange_OT(System::String^ otPath)
{
int k = 0;
try
{
Microsoft::Office::Interop::Excel::Application^ xlsApp = gcnew Microsoft::Office::Interop::Excel::ApplicationClass();
xlsApp->Visible = false;
System::Object^ xlsMissing = System::Reflection::Missing::Value;
Workbook^ wb = xlsApp->Workbooks->Open(otPath, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing, xlsMissing);

Microsoft::Office::Interop::Excel::Worksheet^ ws;
OtSheetNum = wb->Sheets->Count-1;
for each(ws in wb->Worksheets)
{
OtRange->SetValue(ws->Name,k);
k++;
}
wb->Close(false, otPath, xlsMissing);
xlsApp->Quit();
GC::Collect();
GC::WaitForPendingFinalizers();
}
catch(...)
{
MessageBox::Show("Impossibile aprire il file:\n"+otPath, "Error", MessageBoxButtons::OK, MessageBoxIcon::Error);
}

}