venerdì 19 ottobre 2012

IExpress: eseguire file bat su Windows 64 bit bugfix

Microsoft fornisce gratuitamente un'utility, chiamata IExpress, che consente di creare pacchetti di files compressi autoestraenti.IExpress offre inoltre la possibilità di eseguire delle azioni, come lanciare un processo ad esempio, automaticamente al termine dell'estrazione


Maggior informazioni sull'utility IExpress possono essere trovate direttamente sul sito della Microsoft ai seguenti indirizzi TechNet e KB, oppure googlando nel web.

Sfruttando questa utility in un progetto mi sono imbattuto in bug mentre tentavo di far eseguire un piccolo script bat su una macchina con Windows 7 64bit.
Al termine della procedura automatica di estrazione del pacchetto, al momento di lanciare il bat, appare il messaggio: "Errore durante la creazione del processo < Command.com /C", come meglio esplicitato dalla seguente immagine.



Questo succede perché IEXpress tenta di eseguire lo script bat invocando la vecchia utility a 16bit Command.com che non è più presente sui sistemi a 64 bit.

Per ovviare al bug dobbiamo forzare noi la chiamata all'utility 32bit CMD.exe.
Per fare questo, durante il setup guidato dell'utility IExpress, anziché chiamare direttamente il file bat, dobbiamo anteporre la chiamata al processo cmd con parametro /c, come mostrato in figura



mercoledì 10 ottobre 2012

Arrotondare un numero ad x cifre decimali

Semplice routine in C++ per arrotondare un numero float alla cifra decimale passata come parametro della routine.

float GetRounded(float numToR,int decimals)
{
    float rounded = 0.0f, decimal = 0.0f;     float plus = 0.0f, minus = 0.0f;     plus = pow(10.0,decimals);     minus = pow(10.0,-decimals);     rounded = numToR * plus;     decimal =  abs((int)rounded - rounded);     rounded = (int)rounded / plus;     if(decimal > 0.5)          rounded += minus;     return rounded; }