![]() |
|
|
#1
|
||||
|
||||
|
Код:
var
Form1: TForm1;
p:pointer;
p1,p2:pointer;
Str:String;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Str:='666';
p1:=pointer(Str);
p2:=@pointer(Str);Чем отличается содержимое p1 и p2 ? Последний раз редактировалось Lotles, 13.10.2009 в 17:26. |
|
#2
|
||||
|
||||
|
Что никто не знает?
|
|
#3
|
||||
|
||||
|
Я знаю, оба указателя, оба бессмысленные.
|
|
#4
|
||||
|
||||
|
Цитата:
var Код:
Form1: TForm1;
S:String;
p2:pointer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
S:='Test';
p2:=pointer(S);
end;
end.Скажите что находится в p2 ??? |
|
#5
|
||||
|
||||
|
Странный ты, видимо читать не любишь.
В дельфи строка тупо указатель, первые четые байта - смещение, потом данные #0 оканчивающиеся. А интерпритатор делает их удобными тебе (строки). Так вот в p2 у тебя указатель на указатель на строку, т.е. бессмысленный А вот если ты сделаешь: Код:
p2:=@s[1]; |
|
#6
|
||||
|
||||
|
Спасибо за подробное изложение
но p2:=pointer(S) - это указатель на указатель на строку как вы сказали, а указатель в моем понимании это адрес, поэтому я запутался, когда вспомнил про p1:=@S , так и не пойму, чем отличается их содержимое ??? Последний раз редактировалось Lotles, 18.10.2009 в 18:42. |
|
#7
|
||||
|
||||
|
Цитата:
Код:
p1 := @S; Код:
p2 := pointer(S); если нужно конкретное решение, высказывай проблему - подскажем |
|
#8
|
||||
|
||||
|
Цитата:
Код:
var
Form1: TForm1;
Str:String;
p1:pointer;
p2:pointer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Str:='text';
p1:=@Str;
p2:=pointer(Str);
if p1=p2 then
ShowMessage ('p1 и p2 ничем не отличаются');//это сообщение не высвечив-ся
end;
end.Тогда здесь почему так ? |
|
#9
|
||||
|
||||
|
Код:
@Str[1] или Pointer(Str) или PChar(Str) Код:
@Str Последний раз редактировалось AleD, 20.10.2009 в 07:04. |
|
#10
|
||||
|
||||
|
Aled, Спасибо !!! Я насчет этой темы вроде тупой но иногда полезной долго мучился что только не на придумывывал вы бы знали.
Последний раз редактировалось Lotles, 23.10.2009 в 19:06. |
|
#11
|
||||
|
||||
|
Цитата:
|
|
#12
|
|||
|
|||
|
Доброго всем времени суток, как говорится.
Столкнулся с элементарной проблемой: не могу проверить равна ли ссылка (pointer) ничему. Пишу так: Код:
var SelectObject : ^TGLBaseSceneObject; ... if (SelectObject<>nil) then BEGIN Position_X_Edit.Text:=(CurrToStr(SelectObject^.Position.X)); Position_Y_Edit.Text:=(CurrToStr(SelectObject^.Position.Y)); Position_Z_Edit.Text:=(CurrToStr(SelectObject^.Position.Z)); Rotation_Pich_Edit.Text:=(CurrToStr(SelectObject^.PitchAngle)); Rotation_Roll_Edit.Text:=(CurrToStr(SelectObject^.RollAngle)); Rotation_Turn_Edit.Text:=(CurrToStr(SelectObject^.TurnAngle)); END |
|
#13
|
||||
|
||||
|
А что, собственно, не так? Условие никогда не выполняется? Посмотри в сторону где присваивается SelectObject.
Последний раз редактировалось AleD, 31.01.2010 в 11:21. |
|
#14
|
|||
|
|||
|
Доброго времени суток, товарищи. Есть процедура получения размера ресурса и указателя на данные ресурса. Но перед тем как выдать указатель из процедуры, данные по его адресу нужно обратотать функцией "Function Decode(DInPut: Byte): Byte;" тип передаваемого и получаемого пареметров функции изменить не возможно. Тип данных по адресу "ResPtr" не известен.
Код:
...
Type
TByteArray = Array Of Byte;
Procedure LoadDataFromRes(TheData: String; Var DataSize: LongWord; Var DataPtr: Pointer);
Var
ResHandle : THandle;
MemHandle : THandle;
ResPtr : Pointer;
Buffer : TByteArray;
Count : LongWord;
Begin
DataPtr := NIL;
DataSize := 0;
ResHandle := FindResource(hInstance, PChar(TheData), 'DATA');
MemHandle := LoadResource(hInstance, ResHandle);
DataSize := SizeOfResource(hInstance, ResHandle);
ResPtr := LockResource(MemHandle);
IF (ResPtr = NIL) OR (DataSize = 0) Then Exit;
SetLength(Buffer, DataSize);
Move(ResPtr, Buffer, DataSize);
For Count := 0 To DataSize-1 Do
Begin
Buffer[Count] := Decode(Buffer[Сount]);
End;
Move(Buffer, DataPtr, DataSize);
FreeResource(ResHandle);
End;И ещё один вопрос, как из области памяти получить/присвоить значение определенного байта, имея лишь указатель на область и зная ее размер, без использвания массивов? |
|
#15
|
||||
|
||||
|
|