Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > У меня компонент возврощает указатель pointer


Автор: Bes 6.7.2005, 14:15
MyStrinr:=Pchar(MyPointer) не подходит т.к. видимо что-то связано с завершающим нулем и результирующая строка выводит только первые несколько символов

Автор: Akella 6.7.2005, 15:17
попробуй так


MyStrinr := ^MyPointer

Автор: Rrader 6.7.2005, 15:25
dsergey
Не пройдет.
Код

MyStrinr := MyPointer^;

Автор: Akella 6.7.2005, 15:31
Код

procedure TForm1.FormCreate(Sender: TObject);
var
 s:string;
 p:pointer;
begin
 s:=p^;
end;

не компилится
"Incompadible types String and Procedure..."

Автор: Quadr0 6.7.2005, 15:51
...

Автор: p0s0l 6.7.2005, 21:20
Цитата(Bes @ 6.7.2005, 14:15)
MyStrinr:=Pchar(MyPointer) не подходит т.к. видимо что-то связано с завершающим нулем и результирующая строка выводит только первые несколько символов
Если есть в строке нулевые символы, PChar не поможет. В этом случае нужно знать длину строки и делать так:
Код
SetLength(MyString, MyStringLen); // MyStringLen тоже должна вовзращаться компонентом
Move(MyPointer^, MyString[1], MyStringLen);


Автор: Bes 7.7.2005, 10:46
2Посол: попробовал так - все равно только первые несколько символов выводится.
Может как-то перегнать в массив байтов и потом в стринг?

Автор: Girder 7.7.2005, 10:56
Bes если ты знаеш длину данных - то просто пройдись по всему массиву и замени енти байты на пробелы.

Автор: Bes 7.7.2005, 11:12
2Girder:
так и сделал. спасибо - проблема решена.
2p0s0l: спасибо за синтаксис работы с указателями.
Рабочий код:
Код

Var
     S:string;
     i:integer;
     P:Pchar;
     par:array of byte;
begin
     
     P:=Buffer;
     SetLength(par, BufLen);
     Move(P^, par[0], BufLen);
     S:='';
     for i:=0 to BufLen-1 do
     if par[i]=0 then S:=s+' ' else S:=S+chr(par[i]);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)