Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Присвоение значения по ссылке   Найти похожие ветки 

 
IgorR   (2004-06-01 14:51) [0]

Есть function (P: Pointer) в которой передается ссылка на параметр типа string.
У объекта есть параметр TEXT: sыекштп.
Необходимо присвоить параметру по ссылке P значение TEXT.
Перепробовал кучу вариантов - ничего не получилось.
Может есть ктонить знающий как с этими ... ссылками разобраться.


 
Sandman25 ©   (2004-06-01 14:54) [1]

procedure TForm1.FormCreate(Sender: TObject);
var
 P: pointer;
 s: string;
begin
 p := @s;
 PString(P)^ := "12";
 showmessage(s);
end;


 
Sandman25 ©   (2004-06-01 14:55) [2]

Но вообще то удобнее работать с
function myfunc(var s: string);


 
panov ©   (2004-06-01 15:04) [3]

1. Под строку, которую необходимо заполнить, должно быть выделено достаточное количество памяти, например, в вызывающей программе:

SetLength(MyStr,500);

В вызываемой процедуре:

procedure MyFunc(pStr: PChar);
var
 s: String;
begin
 s :="Строка для проверки"+#0;
 Move(s[1],pStr,Length(s));
end;

Обращение:

var
 src: String;
 p: PChar;
begin
 SetLength(Src,500);
 p := @src[1];
 MyFunc(p);
 src := p;
 ShowMessage(src);


 
panov ©   (2004-06-01 15:04) [4]

Move(s[1],pStr^,Length(s));


 
IgorR   (2004-06-01 15:11) [5]

Спасибо, вроде работает.
Через var параметр передать не получится.
Слишком разные объекты в этом учавствуют.
Я использую
Control.Perform(SWB_DOC_GETVALUE, Int64(@Result), 0);
А в принимающей стороне
procedure TMyEdit.SWMInitGetValue(var Message: TMessage);
begin
 if Trim(Text) <> "" then begin
   PString(Pointer(Message.WParam))^ := Self.Text;
   Message.Result := 1;
 end;
end;
Спасибо


 
Тимохов ©   (2004-06-01 15:17) [6]

на фига вы пишете int64?


 
WebErr ©   (2004-06-01 15:23) [7]


> на фига вы пишете int64?

У него 64bit процессор? ^^


 
IgorR   (2004-06-01 15:26) [8]

Привычка.
Можно конечно и LongInt, только суть проблемы не в этом.
Здесь было высказано, что под строку необходимо выделить достаточное количество памяти.
Но дело в том, что перед вызовом

Perform(_GETVALUE, Integer(@Result), 0);

Я не знаю какой длянны будет присваеваемое знчение.


 
Тимохов ©   (2004-06-01 15:33) [9]


> IgorR   (01.06.04 15:26) [8]

в вашем случае выделять не надо.
выделать нужно когда делаешь через move (как в примере panov)
ваш варинат не работает?
в чем это выражается?


 
IgorR   (2004-06-01 15:39) [10]

Когда я пробовал через MOVE, тогда у меня ничего не получалось
Сейчас с подачи "Sandman25" я использую
  PString(Pointer(Message.WParam))^ := Self.Text;
и все замечательно работает.
Если подводных камней в этом коде нет. то на этом и остановимся.
Спасибо.


 
Тимохов ©   (2004-06-01 15:44) [11]


> IgorR   (01.06.04 15:39) [10]

подводность камней зависит от того, как описана result, примененная в коде Control.Perform(SWB_DOC_GETVALUE, Int64(@Result), 0);
если не как string, то будет утечка памяти (если вы, конечно, сами не позботитесь об освобождении памяти). если как string, то утечки не будет.


 
Тимохов ©   (2004-06-01 15:45) [12]


> Тимохов ©   (01.06.04 15:44) [11]

в дополнение:
еще важно как вы с этим result потом работаете, что вы с ним делаете.


 
WebErr ©   (2004-06-01 15:47) [13]


> Если подводных камней в этом коде нет. то на этом и остановимся.

Подводных камней нет.
Эта низкоуровневая фишка, перекинутая в Delphi, весьма логична.
Мало того, можно творить чудеса с типами в таком маниакально типизированном языке, как Паскаль.

var
P: Type1;
Q: Type2;
type
PType1 = ^Type1;
PType2 = ^Type2;
...
P := PType1(Pointer(@Q))^;


 
IgorR   (2004-06-01 15:48) [14]

Дальше я его загоняю в StringList
и формирую массив значений для сохранения/отображения/пердачи/печати документа.
Но это уже совсем другая история.


 
Тимохов ©   (2004-06-01 15:49) [15]


> IgorR   (01.06.04 15:48) [14]

какая разница куда вы его загоняете
какого типа result?


 
IgorR   (2004-06-01 15:51) [16]

Result типа string.


 
Тимохов ©   (2004-06-01 15:53) [17]


> IgorR   (01.06.04 15:51) [16]
> Result типа string.

Тогда все ок.



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

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
14-1085782607
Andre
2004-05-29 02:16
2004.06.13
Браузер


3-1084947752
Dima
2004-05-19 10:22
2004.06.13
Пустые запросы


1-1086151146
Maestro
2004-06-02 08:39
2004.06.13
access violation и Abstract error для чайников


1-1085979482
Litr
2004-05-31 08:58
2004.06.13
Chart


6-1082630675
andrysha
2004-04-22 14:44
2004.06.13
Переслать файл по сети на delphi7





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