Attualmente siamo di fronte al problema che un componente esterno (purtroppo non sappiamo quale) venga caricato quando si utilizza la finestra di dialogo di apertura/salvataggio di Windows, alcuni sistemi modificano le impostazioni locali del processo, probabilmente effettuando la chiamata setlocale(LC_ALL, "")
.È possibile disabilitare setlocale() all'interno di un processo?
Ciò compromette la nostra applicazione, poiché si basa sulla locale standard impostata (che non viene modificata da nessuno dei nostri componenti durante il runtime).
Quindi dobbiamo assicurarci che o setlocale()
non abbia mai alcun effetto quando viene chiamato all'interno del processo, o dobbiamo rilevare ogni volta che viene chiamata questa funzione e quindi reimpostare la locale sulla locale predefinita "C".
C'è un modo per raggiungere uno di questi obiettivi?
si può mettere un punto di interruzione funzioni di libreria - vedi https://stackoverflow.com/questions/3080624/debug-break-on-win32-api-functions – sashoalm
@sashoalm Grazie, ma sfortunatamente non possiamo eseguire il debug di questo problema perché non si verifica su alcun PC di sviluppo. Anche se lo facesse e conoscessimo il componente, questo non aiuterebbe molto a proteggere il processo da tali cambiamenti. – floele
Provare a usare un trampolino allora - https://stackoverflow.com/questions/189725/questa-una-trampolina-funzione – sashoalm