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

Вниз

Не работает пример. В чем ошибка ?   Найти похожие ветки 

 
Roxtady   (2002-08-22 17:42) [0]

Есть такой код


//P1 типа PChar, присваиваем ему значение
P1:="x=";
//Копируем значение x в P2 типа PChar, x:integer
wvsprintf(P2,"%i",@x);
//Склеиваем P1 и P2. P1 получается что-то типа "x=45"
P1:=lStrCat(P1,P2);
//Прибавляем к P1 "y=". P1 получается что-то типа "x=45 y="
P1:=lStrCat(P1," y=");
//Копируем y в P2. И вот тут ошибка. Если даже y=35, то по идее
//P2 должно стать "35". Но оно становится что-то вроде
//" y=". ОТКУДА ТАКОЕ ?
wvsprintf(P2,"%i",@y);
//Ну этот код скрепляет P1 и P2. И P1 должен стать по идее
//что-то типа "x=45 y=50"
//Но из-за ошибки естественно не работает...
P1:=lStrCat(P1,P2);


 
Jeer   (2002-08-22 18:19) [1]

Не майся, а займись вот этим:

procedure FmtStr(var StrResult: string; const Format: string; const Args: array of const);

function Format(const Format: string; const Args: array of const): string;


 
Roxtady   (2002-08-22 19:15) [2]

Блин. Ну я же говорю. Это ведь конференция, посвященная программированию на WINAPI ! А fmtstr - функция из sysutils.

ПОЖАЛУЙСТА, разберитесь в примере. Я понимаю, что там все замудрено, если что непонятно - спрашивайте.


 
Ученик   (2002-08-22 19:25) [3]

var
P1, P2 : array[0..255] of char;
x, y : Integer;
begin
x := 6; y := 10;
lstrcpy(p1, "x=");
//Копируем значение x в P2 типа PChar, x:integer
wvsprintf(P2,"%i",@x);
//Склеиваем P1 и P2. P1 получается что-то типа "x=45"
lStrCat(P1,P2);
//Прибавляем к P1 "y=". P1 получается что-то типа "x=45 y="
lStrCat(P1," y=");
//Копируем y в P2. И вот тут ошибка. Если даже y=35, то по идее
//P2 должно стать "35". Но оно становится что-то вроде
//" y=". ОТКУДА ТАКОЕ ?
wvsprintf(P2,"%i",@y);
//Ну этот код скрепляет P1 и P2. И P1 должен стать по идее
//что-то типа "x=45 y=50"
//Но из-за ошибки естественно не работает...
lStrCat(P1,P2);
MessageBox(0, P1, "Info", MB_OK)


 
Jeer   (2002-08-22 19:30) [4]

Вот и я, блин, думаю - чего человек мучается ?
Борланд не зря ввел свое понятие String - тебе же легче.

Работа со строками в C и с PChar в Дельфи это прежде всего -постоянная забота о РАЗМЕРЕ буфера (ов).

Вот и подумай, откуда ноги растут.


 
Roxtady   (2002-08-22 23:50) [5]

Ученик, то есть, ошибка только в том, что у тебя P1 и P2 это array of char, а у меня P1 и P2 типа PChar ?

Чего то я не понимаю... почему так ?


 
Ученик   (2002-08-22 23:53) [6]

Ну, не только в этом, но это основная


 
Eugen Honeker   (2002-08-23 02:08) [7]

Roxtady, вот тебе аналог на WinApi

function format(buffer: pchar; const format: pchar; argument: array of const): integer;
var
n: integer;
p,tmp: PDWORD;
begin

result:= 0;
n:= length(argument);
if (n = 0) then exit;

getmem(tmp, n * sizeof(Pointer));
p:= tmp;

for n:= 0 to (n-1) do
begin
p^:= PDWORD(@argument[n])^;
inc(p);
end;

result:= wvsprintf(buffer, format, pointer(tmp));
freemem(tmp);
end;


 
Игорь Шевченко   (2002-08-23 11:28) [8]

Извращенцы...


 
Roxtady   (2002-08-23 11:53) [9]

Ученик © (22.08.02 23:53)
Ну, не только в этом, но это основная


А какие ЕЩЕ ошибки ? Я различий больше не нашел...
И почему array of char ? Ведь при описании WinApi функций написано, что нужно пользоваться PChar. Странно...


Игорь Шевченко, ох. Как я понимаю, вы знаеет решение проблемы, но не хотите ее говорить. Ну поделитесь пожалуйста вашим мнением...


 
ZrenBy   (2002-08-23 11:58) [10]

>>Roxtady

Нужно как "Отче наш" вызубрить, что
PChar - это указатель и если ты хочешь туда чего-то писать,
то будь добр выделить необходимую память.


 
Игорь Шевченко   (2002-08-23 12:08) [11]

Угу. Я знаю решение (только, плз, без обид) - прежде чем чего-то сделать, надо это что-то изучить, литературу почитать, к примеру. Если что-то не получается в программе, надо отладчик использовать и так далее.

Рекомендую почитать:
http://ln.com.ua/~openxs/articles/smart-questions-ru.html



 
Roxtady   (2002-08-23 15:42) [12]

Вы случайно не про GetMem, FreeMem ? Все это делается, просто в приведенном коде это опущено, это вырезка из программы. Так в чем тогда может быть дело ? Неужели нельзя использовать PChar, а надо использовать array of char ?

P.S. Модератору. Я здесь новичок и, наверное, многого не понимаю. Можно объяснить, почему эта ветка не подходит под конференцию WinApi ? Ведь я хочу написать свою программу только на WinApi...


 
Roxtady   (2002-08-23 22:39) [13]

Откликнетесь кто-нибудь ! Неужели нельзя использовать PChar ? Зачем тогда был введен такой тип переменных ?


 
Roxtady   (2002-08-24 13:46) [14]

ZrenBy, ау !

Мастера, откликнетесь ! Помогите кто-нибудь. Разъясните ситуацию, а то я не понимаю ни фига...


 
Roxtady   (2002-08-24 14:10) [15]

Ученик

Если заменить Pchar на array of char то:

P1:=lStrCat(P1,P2);
//ошибка Incompatible types: "Array" and "Pchar"


 
I__am   (2002-08-24 14:14) [16]

Я тож с Pcar"ом мучался долго пока не поменял на String



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

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

Наверх





Память: 0.48 MB
Время: 0.006 c
3-13944
samson
2002-08-16 06:11
2002.09.05
отчёт


14-14266
Зубарев Антон
2002-05-10 11:49
2002.09.05
Работа с LPT


14-14258
naik
2002-08-11 10:30
2002.09.05
Нужна электронная книга по delphi


3-13940
Arsen
2002-08-15 15:23
2002.09.05
Счетчик в Access


3-13954
atikiN
2002-08-12 15:11
2002.09.05
Графика и музыка в БД





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