Привет всем! Вапрос такой, как БЕЗ использования RTL сделать преобразования: строка -> число(Разделителем может быть как точка так и запятая) На паскале я бы сделал это примерно так: Код (Text): function StrToDouble(s: ShortString): Double; stdcall; var i, j: Dword; begin j := SizeOf(s) ; for i := 1 to j do if s[i] = ',' then s[i] := '.'; Val(s, Result, i); end; //StrToDouble И обратно из числа в строку: Код (Text): function DoubleToStr(x: Double): PChar; stdcall; var s: String; begin Str(x : 0 : 2, s); Result := PChar(s); end; //DoubleToStr Подскажите плиз как это можно сделать на си, или с использованием Inline Asm'a...
Avoidik посмотрел, то что надо но, не получается портировать... Не пинайте сильно, я только учусь... Помогите плиз...
x3r0n Скомпилируйте тот сэмпл на фасме в .obj и прилинкуйте его к основной программе. И не надо ничего портировать.
На дельфи есть переписанные SysUtils,System без ртл, но со всеми остальными функциями) Спасибо, сейчас попробую
Обьясните плиз как правильно сделать, и правильно ли я делаю вообще... В общем в директории C:\masm32\fpulib есть 2 файла: FpuFLtoA.asm FpuAtoFL.asm Судя по описанию это то что нужно... Дальше в масме делаю Project->Assemble ASM file Получаю 2 obj файла... Дальше в своем проекте пишу: #pragma resource "FpuFLtoA.obj" #pragma resource "FpuAtoFL.obj" HWND Handle; char buf[512]; float i; int start( void ) { Handle = FindWindow(0, "Мое окно"); Handle = GetWindow(Handle, GW_CHILD); SendMessage(Handle, WM_GETTEXT, (WPARAM) sizeof(buf), (LPARAM) buf); ... В buf хранится строка представляющая из себя число, в котором разделителем может быть как точка так и запятая... Подскажите плиз как мне используя FpuAtoFL перевести ее в число, потом например прибавить к нему 1 и перевести обратно с помощью FpuFLtoA в строку... Прототипы этих функций: FpuAtoFL lpSrcWORD, lpDestWORD, uIDWORD FpuFLtoA lpSrcWORD, lpDecimalWORD, lpDestWORD, uIDWORD Не пинайте сильно все вы когда-то были новичками
в масме создай объектники своих функций и через линкер создай либу, либу подключай к своему проекту, по аналогии масмовых прототипов напиши свой файл заголовков (.h) и юзай
Ты имеешь ввиду создать длл или *.lib? Если длл, такой вариант не подходит т.к. размер сильно увеличится... *.lib создать у меня не получилось сделал как написано в FAQ: КОМПИЛЯЦИЯ В LIB(MS WINDOWS) MASM: ml /c /coff file_name.asm Lib file_name.obj Ошибок нет, но и нет либ файлов... Обьясните плиз как это сделать, на примере FpuAtoFL...
x3r0n link -lib /OUT:file_name.lib file_name.obj Хотя нет особого смысла создавать либ-файл, т.к. obj можно использовать напрямую.
#define IsDigit(c) ((c) >= '0' && (c) <= '9') double StringToDouble (char s[]) { int i=0; double val, power; for (val = 0.0; IsDigit(s); i++) val = 10.0 * val + (s - '0'); if (s == '.') i++; for (power = 1.0; IsDigit(s); i++) { val = 10.0 * val + (s - '0'); power *= 10.0; } val = val / power; return val; } сдается мне товарищ мутит очередного мега трояна для WM