ciao.
Ho compilato un progetto opensource(pnglib) ma credo che non si il fulcro del problema.
Il problema nasce quando pnglib invoca la funzione fread_s che mi da un errore su
l'errore è sul _lock_str(stream); e in particolare su questa funzione:codice:/* define locking/unlocking version */ size_t __cdecl fread_s( void *buffer, size_t bufferSize, size_t elementSize, size_t count, FILE *stream ) { size_t retval = 0; if (elementSize == 0 || count == 0) { return 0; } // only checking for stream == NULL here for _lock_str() // the rest of the validation is in _fread_nolock_s() if (stream == NULL ) { if (bufferSize != SIZE_MAX) { memset(buffer, _BUFFER_FILL_PATTERN, bufferSize); } _VALIDATE_RETURN((stream != NULL), EINVAL, 0); } _lock_str(stream);//ERRORE __try { /* do the read; _fread_nolock_s will make sure we do not buffer overrun */ retval = _fread_nolock_s(buffer, bufferSize, elementSize, count, stream); } __finally { _unlock_str(stream); } return retval; }
qui EnterCriticalSection( &(((_FILEX *)pf)->lock) );/////ERROREcodice:void __cdecl _lock_file ( FILE *pf ) { /* * The way the FILE (pointed to by pf) is locked depends on whether * it is part of _iob[] or not */ if ( (pf >= _iob) && (pf <= (&_iob[_IOB_ENTRIES-1])) ) { /* * FILE lies in _iob[] so the lock lies in _locktable[]. */ _lock( _STREAM_LOCKS + (int)(pf - _iob) ); /* We set _IOLOCKED to indicate we locked the stream */ pf->_flag |= _IOLOCKED; } else /* * Not part of _iob[]. Therefore, *pf is a _FILEX and the * lock field of the struct is an initialized critical * section. */ EnterCriticalSection( &(((_FILEX *)pf)->lock) );/////ERRORE }
quello che non riesco a capire è che oltre al file .png il progetto legge altri file con la stessa dinamica , solo che queste letture vanno tutte a buon fine , funziona anche il lock, solo il file .png ha questo problema, ho provato a guradare i permessi ma sembra tutto ok.
grazie.

Rispondi quotando