Hlavní navigace

Názor ke článku Sedíte v zlom vlaku (Linux & MS) od Ogar - A na zaver moje 'nejoblibenejsi' funkce Win32 API:<b>CharUp­per</b> "The...

  • 4. 9. 2008 10:33

    Ogar (neregistrovaný)

    A na zaver moje 'nejoblibenejsi' funkce Win32 API:<b>CharUp­per</b>

    "The CharUpper function converts a character string or a single character to uppercase. If the operand is a character string, the function converts the characters in place."

    <b>LPTSTR CharUpper(LPTSTR lpsz /* single character or string*/);</b>

    "Parameters: <b>lpsz</b> [in/out] Pointer to a null-terminated string or specifies a single character. If the high-order word of this parameter is zero, the low-order word must contain a single character to be converted."

    Nejlepsi na tom je, ze samotny Microsoft ma nekde v wininet.dll chybu, kde nekde se jako parametr teto funkce dava znak, ale vlivem 'sign-extension' a tim ze byl vetsi jak 127 se 'roztahnul' (v assembleru je misto instrukce <b>movzx</b> pouzita <b>movsx</b>), tudiz tahle funkce ho vyhodnoti jako pointer a zkolabuje :-(

    Bohuzel, tahle funkcionalita je interne pouziva v prohlizeci .chm hh.exe, takze po kazde vetsi varce 'patchu' od MS, mne MSDN library dokumentace pri spusteni spadne a musim 'rucne' v assembleru v wininet.dll prepsat tuto instrukci .....