Questa sera, dopo il lavoro, ho provato qualche ulteriore test ed ho scoperto una cosa che, se vera, ha dell'incredibile: pare che XP dia come esito di GetModuleFileName() una stringa
non zero-terminata, mentre Windows 7 pare dare come esito una stringa
zero-terminata. Se venisse confermata questa situazione, direi che Microsoft ha fatto una figura barbina: cambiare una funzione senza cambiarne il nome o i parametri (in modo da rendere impossibile ogni forma di confusione) è uno sgambetto che non ci si aspetterebbe da una ditta seria.
Ora RicavaPercorsoProgramma() funziona sul mio XP come sul mio Windows 7 di casa. Domani vedrò come si comporta sui computer "blindati" della scuola, con un mix di XP, 7 e 8.
BOOL RicavaPercorsoProgramma( HINSTANCE hndIstanza, LPSTR *pBuffer ) {
try {
int dimPerc = 0; // dimensioni del percorso
int dimBuff = 0; // dimensioni del buffer
char *buffer = NULL;
do {
delete[] buffer;
dimBuff += MAX_PATH;
buffer = new char[dimBuff];
dimPerc = GetModuleFileName( hndIstanza, buffer, dimBuff );
if( dimPerc == 0 ) { delete[] buffer; return FALSE; }
} while( dimPerc >= dimBuff );
buffer[dimPerc] = 'Questa sera, dopo il lavoro, ho provato qualche ulteriore test ed ho scoperto una cosa che, se vera, ha dell'incredibile: pare che XP dia come esito di GetModuleFileName() una stringa non zero-terminata, mentre Windows 7 pare dare come esito una stringa zero-terminata. Se venisse confermata questa situazione, direi che Microsoft ha fatto una figura barbina: cambiare una funzione senza cambiarne il nome o i parametri (in modo da rendere impossibile ogni forma di confusione) è uno sgambetto che non ci si aspetterebbe da una ditta seria.
Ora RicavaPercorsoProgramma() funziona sul mio XP come sul mio Windows 7 di casa. Domani vedrò come si comporta sui computer "blindati" della scuola, con un mix di XP, 7 e 8.
BOOL RicavaPercorsoProgramma( HINSTANCE hndIstanza, LPSTR *pBuffer ) {
try {
int dimPerc = 0; // dimensioni del percorso
int dimBuff = 0; // dimensioni del buffer
char *buffer = NULL;
do {
delete[] buffer;
dimBuff += MAX_PATH;
buffer = new char[dimBuff];
dimPerc = GetModuleFileName( hndIstanza, buffer, dimBuff );
if( dimPerc == 0 ) { delete[] buffer; return FALSE; }
} while( dimPerc >= dimBuff );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
dimPerc = EliminaUltimaPartePercorso( buffer, dimPerc );
if( dimPerc>1 && buffer[dimPerc-1]==':' )
{ buffer[dimPerc]='\'; buffer[++dimPerc]='{parsed_message}'; }
if( dimPerc >= 0 ) {
delete[] buffer;
buffer = new char[dimPerc+1];
GetModuleFileName( hndIstanza, buffer, dimPerc+1 );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
}
*pBuffer = buffer;
return TRUE;
} catch( ... ) {
return FALSE;
}
}
DWORD EliminaUltimaPartePercorso( char *pc, DWORD lp ) {
for( --lp; pc[lp]!='\' && pc[lp]!='/' && lp>=0; --lp )
pc[lp] = '{parsed_message}';
// se il percorso "tagliato" termina con un carattere '\', elimina
// l'ultimo carattere del percorso; per evitare problemi dovuti ai
// "capricci" di Microsoft, termina la stringa
if( pc[lp] == '\' || pc[lp] == '/' )
pc[lp] = '{parsed_message}';
else pc[--lp] = '{parsed_message}';
return lp;
}
'; // XP non termina la stringa, Windows 7 sì!!!
dimPerc = EliminaUltimaPartePercorso( buffer, dimPerc );
if( dimPerc>1 && buffer[dimPerc-1]==':' )
{ buffer[dimPerc]='\'; buffer[++dimPerc]='Questa sera, dopo il lavoro, ho provato qualche ulteriore test ed ho scoperto una cosa che, se vera, ha dell'incredibile: pare che XP dia come esito di GetModuleFileName() una stringa non zero-terminata, mentre Windows 7 pare dare come esito una stringa zero-terminata. Se venisse confermata questa situazione, direi che Microsoft ha fatto una figura barbina: cambiare una funzione senza cambiarne il nome o i parametri (in modo da rendere impossibile ogni forma di confusione) è uno sgambetto che non ci si aspetterebbe da una ditta seria.
Ora RicavaPercorsoProgramma() funziona sul mio XP come sul mio Windows 7 di casa. Domani vedrò come si comporta sui computer "blindati" della scuola, con un mix di XP, 7 e 8.
BOOL RicavaPercorsoProgramma( HINSTANCE hndIstanza, LPSTR *pBuffer ) {
try {
int dimPerc = 0; // dimensioni del percorso
int dimBuff = 0; // dimensioni del buffer
char *buffer = NULL;
do {
delete[] buffer;
dimBuff += MAX_PATH;
buffer = new char[dimBuff];
dimPerc = GetModuleFileName( hndIstanza, buffer, dimBuff );
if( dimPerc == 0 ) { delete[] buffer; return FALSE; }
} while( dimPerc >= dimBuff );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
dimPerc = EliminaUltimaPartePercorso( buffer, dimPerc );
if( dimPerc>1 && buffer[dimPerc-1]==':' )
{ buffer[dimPerc]='\'; buffer[++dimPerc]='{parsed_message}'; }
if( dimPerc >= 0 ) {
delete[] buffer;
buffer = new char[dimPerc+1];
GetModuleFileName( hndIstanza, buffer, dimPerc+1 );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
}
*pBuffer = buffer;
return TRUE;
} catch( ... ) {
return FALSE;
}
}
DWORD EliminaUltimaPartePercorso( char *pc, DWORD lp ) {
for( --lp; pc[lp]!='\' && pc[lp]!='/' && lp>=0; --lp )
pc[lp] = '{parsed_message}';
// se il percorso "tagliato" termina con un carattere '\', elimina
// l'ultimo carattere del percorso; per evitare problemi dovuti ai
// "capricci" di Microsoft, termina la stringa
if( pc[lp] == '\' || pc[lp] == '/' )
pc[lp] = '{parsed_message}';
else pc[--lp] = '{parsed_message}';
return lp;
}
'; }
if( dimPerc >= 0 ) {
delete[] buffer;
buffer = new char[dimPerc+1];
GetModuleFileName( hndIstanza, buffer, dimPerc+1 );
buffer[dimPerc] = 'Questa sera, dopo il lavoro, ho provato qualche ulteriore test ed ho scoperto una cosa che, se vera, ha dell'incredibile: pare che XP dia come esito di GetModuleFileName() una stringa non zero-terminata, mentre Windows 7 pare dare come esito una stringa zero-terminata. Se venisse confermata questa situazione, direi che Microsoft ha fatto una figura barbina: cambiare una funzione senza cambiarne il nome o i parametri (in modo da rendere impossibile ogni forma di confusione) è uno sgambetto che non ci si aspetterebbe da una ditta seria.
Ora RicavaPercorsoProgramma() funziona sul mio XP come sul mio Windows 7 di casa. Domani vedrò come si comporta sui computer "blindati" della scuola, con un mix di XP, 7 e 8.
BOOL RicavaPercorsoProgramma( HINSTANCE hndIstanza, LPSTR *pBuffer ) {
try {
int dimPerc = 0; // dimensioni del percorso
int dimBuff = 0; // dimensioni del buffer
char *buffer = NULL;
do {
delete[] buffer;
dimBuff += MAX_PATH;
buffer = new char[dimBuff];
dimPerc = GetModuleFileName( hndIstanza, buffer, dimBuff );
if( dimPerc == 0 ) { delete[] buffer; return FALSE; }
} while( dimPerc >= dimBuff );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
dimPerc = EliminaUltimaPartePercorso( buffer, dimPerc );
if( dimPerc>1 && buffer[dimPerc-1]==':' )
{ buffer[dimPerc]='\'; buffer[++dimPerc]='{parsed_message}'; }
if( dimPerc >= 0 ) {
delete[] buffer;
buffer = new char[dimPerc+1];
GetModuleFileName( hndIstanza, buffer, dimPerc+1 );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
}
*pBuffer = buffer;
return TRUE;
} catch( ... ) {
return FALSE;
}
}
DWORD EliminaUltimaPartePercorso( char *pc, DWORD lp ) {
for( --lp; pc[lp]!='\' && pc[lp]!='/' && lp>=0; --lp )
pc[lp] = '{parsed_message}';
// se il percorso "tagliato" termina con un carattere '\', elimina
// l'ultimo carattere del percorso; per evitare problemi dovuti ai
// "capricci" di Microsoft, termina la stringa
if( pc[lp] == '\' || pc[lp] == '/' )
pc[lp] = '{parsed_message}';
else pc[--lp] = '{parsed_message}';
return lp;
}
'; // XP non termina la stringa, Windows 7 sì!!!
}
*pBuffer = buffer;
return TRUE;
} catch( ... ) {
return FALSE;
}
}
DWORD EliminaUltimaPartePercorso( char *pc, DWORD lp ) {
for( --lp; pc[lp]!='\' && pc[lp]!='/' && lp>=0; --lp )
pc[lp] = 'Questa sera, dopo il lavoro, ho provato qualche ulteriore test ed ho scoperto una cosa che, se vera, ha dell'incredibile: pare che XP dia come esito di GetModuleFileName() una stringa non zero-terminata, mentre Windows 7 pare dare come esito una stringa zero-terminata. Se venisse confermata questa situazione, direi che Microsoft ha fatto una figura barbina: cambiare una funzione senza cambiarne il nome o i parametri (in modo da rendere impossibile ogni forma di confusione) è uno sgambetto che non ci si aspetterebbe da una ditta seria.
Ora RicavaPercorsoProgramma() funziona sul mio XP come sul mio Windows 7 di casa. Domani vedrò come si comporta sui computer "blindati" della scuola, con un mix di XP, 7 e 8.
BOOL RicavaPercorsoProgramma( HINSTANCE hndIstanza, LPSTR *pBuffer ) {
try {
int dimPerc = 0; // dimensioni del percorso
int dimBuff = 0; // dimensioni del buffer
char *buffer = NULL;
do {
delete[] buffer;
dimBuff += MAX_PATH;
buffer = new char[dimBuff];
dimPerc = GetModuleFileName( hndIstanza, buffer, dimBuff );
if( dimPerc == 0 ) { delete[] buffer; return FALSE; }
} while( dimPerc >= dimBuff );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
dimPerc = EliminaUltimaPartePercorso( buffer, dimPerc );
if( dimPerc>1 && buffer[dimPerc-1]==':' )
{ buffer[dimPerc]='\'; buffer[++dimPerc]='{parsed_message}'; }
if( dimPerc >= 0 ) {
delete[] buffer;
buffer = new char[dimPerc+1];
GetModuleFileName( hndIstanza, buffer, dimPerc+1 );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
}
*pBuffer = buffer;
return TRUE;
} catch( ... ) {
return FALSE;
}
}
DWORD EliminaUltimaPartePercorso( char *pc, DWORD lp ) {
for( --lp; pc[lp]!='\' && pc[lp]!='/' && lp>=0; --lp )
pc[lp] = '{parsed_message}';
// se il percorso "tagliato" termina con un carattere '\', elimina
// l'ultimo carattere del percorso; per evitare problemi dovuti ai
// "capricci" di Microsoft, termina la stringa
if( pc[lp] == '\' || pc[lp] == '/' )
pc[lp] = '{parsed_message}';
else pc[--lp] = '{parsed_message}';
return lp;
}
';
// se il percorso "tagliato" termina con un carattere '\', elimina
// l'ultimo carattere del percorso; per evitare problemi dovuti ai
// "capricci" di Microsoft, termina la stringa
if( pc[lp] == '\' || pc[lp] == '/' )
pc[lp] = 'Questa sera, dopo il lavoro, ho provato qualche ulteriore test ed ho scoperto una cosa che, se vera, ha dell'incredibile: pare che XP dia come esito di GetModuleFileName() una stringa non zero-terminata, mentre Windows 7 pare dare come esito una stringa zero-terminata. Se venisse confermata questa situazione, direi che Microsoft ha fatto una figura barbina: cambiare una funzione senza cambiarne il nome o i parametri (in modo da rendere impossibile ogni forma di confusione) è uno sgambetto che non ci si aspetterebbe da una ditta seria.
Ora RicavaPercorsoProgramma() funziona sul mio XP come sul mio Windows 7 di casa. Domani vedrò come si comporta sui computer "blindati" della scuola, con un mix di XP, 7 e 8.
BOOL RicavaPercorsoProgramma( HINSTANCE hndIstanza, LPSTR *pBuffer ) {
try {
int dimPerc = 0; // dimensioni del percorso
int dimBuff = 0; // dimensioni del buffer
char *buffer = NULL;
do {
delete[] buffer;
dimBuff += MAX_PATH;
buffer = new char[dimBuff];
dimPerc = GetModuleFileName( hndIstanza, buffer, dimBuff );
if( dimPerc == 0 ) { delete[] buffer; return FALSE; }
} while( dimPerc >= dimBuff );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
dimPerc = EliminaUltimaPartePercorso( buffer, dimPerc );
if( dimPerc>1 && buffer[dimPerc-1]==':' )
{ buffer[dimPerc]='\'; buffer[++dimPerc]='{parsed_message}'; }
if( dimPerc >= 0 ) {
delete[] buffer;
buffer = new char[dimPerc+1];
GetModuleFileName( hndIstanza, buffer, dimPerc+1 );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
}
*pBuffer = buffer;
return TRUE;
} catch( ... ) {
return FALSE;
}
}
DWORD EliminaUltimaPartePercorso( char *pc, DWORD lp ) {
for( --lp; pc[lp]!='\' && pc[lp]!='/' && lp>=0; --lp )
pc[lp] = '{parsed_message}';
// se il percorso "tagliato" termina con un carattere '\', elimina
// l'ultimo carattere del percorso; per evitare problemi dovuti ai
// "capricci" di Microsoft, termina la stringa
if( pc[lp] == '\' || pc[lp] == '/' )
pc[lp] = '{parsed_message}';
else pc[--lp] = '{parsed_message}';
return lp;
}
';
else pc[--lp] = 'Questa sera, dopo il lavoro, ho provato qualche ulteriore test ed ho scoperto una cosa che, se vera, ha dell'incredibile: pare che XP dia come esito di GetModuleFileName() una stringa non zero-terminata, mentre Windows 7 pare dare come esito una stringa zero-terminata. Se venisse confermata questa situazione, direi che Microsoft ha fatto una figura barbina: cambiare una funzione senza cambiarne il nome o i parametri (in modo da rendere impossibile ogni forma di confusione) è uno sgambetto che non ci si aspetterebbe da una ditta seria.
Ora RicavaPercorsoProgramma() funziona sul mio XP come sul mio Windows 7 di casa. Domani vedrò come si comporta sui computer "blindati" della scuola, con un mix di XP, 7 e 8.
BOOL RicavaPercorsoProgramma( HINSTANCE hndIstanza, LPSTR *pBuffer ) {
try {
int dimPerc = 0; // dimensioni del percorso
int dimBuff = 0; // dimensioni del buffer
char *buffer = NULL;
do {
delete[] buffer;
dimBuff += MAX_PATH;
buffer = new char[dimBuff];
dimPerc = GetModuleFileName( hndIstanza, buffer, dimBuff );
if( dimPerc == 0 ) { delete[] buffer; return FALSE; }
} while( dimPerc >= dimBuff );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
dimPerc = EliminaUltimaPartePercorso( buffer, dimPerc );
if( dimPerc>1 && buffer[dimPerc-1]==':' )
{ buffer[dimPerc]='\'; buffer[++dimPerc]='{parsed_message}'; }
if( dimPerc >= 0 ) {
delete[] buffer;
buffer = new char[dimPerc+1];
GetModuleFileName( hndIstanza, buffer, dimPerc+1 );
buffer[dimPerc] = '{parsed_message}'; // XP non termina la stringa, Windows 7 sì!!!
}
*pBuffer = buffer;
return TRUE;
} catch( ... ) {
return FALSE;
}
}
DWORD EliminaUltimaPartePercorso( char *pc, DWORD lp ) {
for( --lp; pc[lp]!='\' && pc[lp]!='/' && lp>=0; --lp )
pc[lp] = '{parsed_message}';
// se il percorso "tagliato" termina con un carattere '\', elimina
// l'ultimo carattere del percorso; per evitare problemi dovuti ai
// "capricci" di Microsoft, termina la stringa
if( pc[lp] == '\' || pc[lp] == '/' )
pc[lp] = '{parsed_message}';
else pc[--lp] = '{parsed_message}';
return lp;
}
';
return lp;
}