Главная страница
    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.46 MB
Время: 0.045 c
2-1141708089
rainy_
2006-03-07 08:08
2006.03.26
String это тип или класс?


15-1141168449
Teapot
2006-03-01 02:14
2006.03.26
Помогите злому начинающему!


15-1141315416
Jeer
2006-03-02 19:03
2006.03.26
"Принцесса стоит смерти" (С) Л.


3-1138789349
chili
2006-02-01 13:22
2006.03.26
Подскажите как мне создать отчет с помошью QReport


5-1127898961
Иванов__
2005-09-28 13:16
2006.03.26
Нужен компонент HTML-редактор





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский