Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Вниз

Аналог сишного sscanf?   Найти похожие ветки 

 
Alex_C ©   (2006-03-06 10:34) [0]

Есть ли в дельфи аналог sscanf?


 
MBo ©   (2006-03-06 12:54) [1]

Нет. Можно так:
function Sscanf(Buf, Fmt:PChar):Integer; cdecl varargs;  external "msvcrt.dll" name "sscanf";


 
Alex_C ©   (2006-03-07 10:17) [2]

Ок! Спасибо!
Еще вопрос - нашел в инете реализацию данной ф-ции. Но она не работает. Стал разбираться - какая то мистика! Проблема здесь:
for i := 0 to High(Pointers) do
- запускаю  - смотрю при первом проходе переменную i , а она вместо нуля становится равной 1234048 !!!!
Не погу понять - из-за чего такое может произойти?


 
API ©   (2006-03-07 10:20) [3]

Не погу понять - из-за чего такое может произойти?

Из-за оптимизации. Скорее всего, эта переменная является просто счетчиком, и больше нигде не используется.


 
Alex_C ©   (2006-03-07 11:46) [4]

Ну дык нифига себе оптимизация!!! )))
С оптимизировал называется!
А переменная используется дальше
Move(s1, Pointers[i]^, Length(s1) + 1);
И из-за этого ф-ция не работает!


 
Игорь Шевченко ©   (2006-03-07 12:10) [5]

MBo ©   (06.03.06 12:54) [1]

а синтаксис вызова какой ?
(и для какой версии delphi это применимо?)


 
MBo ©   (2006-03-07 12:38) [6]

>а синтаксис вызова какой?
Вещественное число ввести навскидку не получилось - не знаю, какой формат использовать

var
 i: Integer;
 d: Double;
 pc: PChar;
 s: string;
 Readed: Integer;
begin
 s := "asdfg 5";
 GetMem(pc, 100);
 Readed := Sscanf(PChar(s), PChar("%s %d"), pc, @i);
 Caption := Format("%s %d", [pc, i]);
 FreeMem(pc);


>и для какой версии delphi это применимо?)
В 6 работает.


 
MBo ©   (2006-03-07 12:40) [7]

еще здесь есть дельфийские варианты:
http://rsdn.ru/Forum/Message.aspx?mid=804528#804528


 
Leonid Troyanovsky ©   (2006-03-07 12:40) [8]


> Alex_C ©   (07.03.06 11:46) [4]

> Move(s1, Pointers[i]^, Length(s1) + 1);
> И из-за этого ф-ция не работает!


Это не работает исключительно из-за кривости.
Видимо, имелось ввиду что-то вроде: PString(Pointers[i])^ := s1;

И, вообще,  sscanf  - место на свалке истории.

--
Regards, LVT.


 
Игорь Шевченко ©   (2006-03-07 12:44) [9]

MBo ©   (07.03.06 12:38) [6]

Спасибо. Не думал, что в 6-ке работает. То есть, количество аргументов в вызове может быть сколь угодно длинным, я правильно понимаю ?
И никто не мешает, при соотвествующих объявлениях, написать такой вызов

   DbgPrintEx (1, 3,
     "NtCreateFile (%wZ, %I64X, %I64X) failed with %X \n",
     FileName, MinimumSize.QuadPart, MaximumSize.QuadPart, Result);

где, соответственно, первый параметр имеет тип PUNICODE_STRING, а два следующих Int64, стек Delphi корректно сформирует

?

(6-ки нету под рукой проверить)


 
MBo ©   (2006-03-07 13:04) [10]

>стек Delphi корректно сформирует
Ну наверно, да (только указатели на переменные нужны)
Для моего примера в стек толкается 4 аргумента, и после sscanf делается восстановление стека add esp,$10

В хелпе только это:
When importing a C function that takes a variable number of parameters, use the varargs directive. For example,
function printf(Format: PChar): Integer; cdecl; varargs;
The varargs directive works only with external routines and only with the cdecl calling convention.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.031 c
15-1141484609
Зм1й
2006-03-04 18:03
2006.03.26
Помогите с WebMoney!


1-1140414198
Петрович100
2006-02-20 08:43
2006.03.26
как из bmp файла сделать такой, то есть по цвету в 3d


9-1126768956
aldaris!
2005-09-15 11:22
2006.03.26
Помогите начинающему...


11-1118602599
Sagrer
2005-06-12 22:56
2006.03.26
Нет ли каких новостей о GoodWell?


15-1141041655
Test Your Soft Team
2006-02-27 15:00
2006.03.26
Акция "Оцени свой софт"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский