![]()  | 
	
 
  | 
| 
		 
			 
			#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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 |