invoke SQLFetch,hStmt test ax,ax jnz SQLFREEHANDLE invoke SQLGetData,hStmt,9,SQL_C_FLOAT,addr kol,sizeof kol,addr cbData mov lvi.imask,LVIF_TEXT inc lvi.iSubItem invoke wsprintf,addr szSQL,addr lpFlt,addr kol mov lvi.pszText,offset szSQL invoke SendMessage,hListView,LVM_SETITEM, 1,addr lvi Суть проблемы в том, что нужно используя ODBC получить доступ к базе MS ACCESS и вытащить оттуда информацию в приятном глазу виде. Все это я умею делать и делал не раз, но както не приходилось сталкиваться с типом "float". В куске кода видно, что с помощью функции SQLGetData я хочу из 9-го столбца вытащить значение типа "float" в переменную kol, а затем перевести в текстовый формат и отобразить в ListView. Переменные типа DWORD легко конвертируются с помощью функции wsprintf, но она не работает с плавающей точкой. Вопрос: как правильно объявить переменную типа "float" в асме (предположительно LOCAL kol:QWORD) и как правильно конвертировать в текстовый формат. Спасибо.
Объявить: local f:real4 Для конвертирования можешь использовать функцию из комплекта masm32lib - FloatToStr.
Странный результат получается: invoke FloatToStr,kol,addr szSQL mov lvi.pszText,offset szSQL invoke SendMessage,hListView,LVM_SETITEM, 1,addr lvi Отображается следующее 5.535529е-315
Странный результат получается: invoke FloatToStr,kol,addr szSQL mov lvi.pszText,offset szSQL invoke SendMessage,hListView,LVM_SETITEM, 1,addr lvi Отображается следующее 5.535529е-315
Ты уверен, что поле именно float? Когда говорят про float имеют ввиду короткий формат представления чисел с плавающей запятой, есть ещё длинный(8 байт) и расширенный(10 байт).
Спасибо всем кто ответил, рабочий ответ (кого интересует) следующий: LOCAL f:QWORD invoke SQLGetData,hStmt,9,SQL_C_DOUBLE,addr f,sizeof f,addr cbData mov lvi.imask,LVIF_TEXT inc lvi.iSubItem invoke FloatToStr,[f],addr szSQL