| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Доброго времени суток! 
		
		
		
		
		
		
		
	Собствено, сабж. Есть экземпляр класса Binary. Требуется получить его адрес и запихнуть в другой Binary. Вот такое извращение. Не спрашивайте, зачем это надо  ))
		 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Взято отсюда: Сохранение/восстановление буфера обмена 
		
		
		
		
		
		
		
	Код: client server static void copyMemory(Binary _dest, Binary _source, int _size)
{
    DLL         winApiDLL     = new DLL('KERNEL32');
    DLLFunction copyMemory    = new DLLFunction(winApiDLL, 'RtlMoveMemory');
    copyMemory.returns(ExtTypes::void);
    copyMemory.arg(ExtTypes::Pointer, ExtTypes::Pointer, ExtTypes::DWord);
    copyMemory.call(_dest, _source, _size);
} | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			У класса Binary есть метод Attach, он делает именно это. Действует по-моему так 
		
		
		
		
		
		
		
	Если в переменной A со смещением X находится указатель на переменную B, то нужно писать B.Attach(A.dword(X), sizeof(B))  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 X++: Binary Bin, Bin1; ; ... Bin1 = new Binary(4); Bin1.Binary(0, Bin); Bin1.dWord(0); // - адрес памяти объекта Bin 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: ivas (1). | |
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Lucky13
			
			 
У класса Binary есть метод Attach, он делает именно это. Действует по-моему так 
		
	Если в переменной A со смещением X находится указатель на переменную B, то нужно писать B.Attach(A.dword(X), sizeof(B)) ![]() Для attach первым аргументом идет адрес. Который нам нужно узнать. Увы %(  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Однако! код  
		
		
		
		
		
		
		
	Код: static void CHI_Job52(Args _args)
{
    Binary b1, b2;
    ;
    b1 = new Binary(4);
    b2 = new Binary(4);
    b1.attach(b2.dWord(0), 4);
    print b1.byte(1);
    pause;
} 
		 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от ivas
			
			 
 Есть экземпляр класса Binary. Требуется получить его адрес и запихнуть в другой Binary 
		
	A - другой Binary, в смещении X лежит указатель, который должен указывать на B. Да, мы не узнали адреса B, но присвоили его в другой Binary. По-моему это и было нужно. Или я не прав?  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от ivas
			
			 
Однако! код  
		
	Код: static void CHI_Job52(Args _args)
{
    Binary b1, b2;
    ;
    b1 = new Binary(4);
    b2 = new Binary(4);
    b1.attach(b2.dWord(0), 4);
    print b1.byte(1);
    pause;
}![]()  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2 Lucky13  
		
		
		
		
		
		
			Attach() присваивает объекту Binary указатель на память, передаваемую в первом аргументе. A.dWord(X) - это не указатель на память, а значение, хранящееся в памяти по смещению X. Т.е. объект начинает ссылаться на неопределенное место в памяти, по-этому при пропытке обратиться туда возникает GPF 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от ivas
			
			 
Требуется получить его адрес и запихнуть в другой Binary. 
		
	X++ основан на java. Java не содержит указателей (принцип у нее такой). Если хотите понять как получить адрес в X++, то ищите ответ на ресурсах по java.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Lucky13
			
			 
Здесь B - экземпляр объекта Binary 
		
	A - другой Binary, в смещении X лежит указатель, который должен указывать на B. Да, мы не узнали адреса B, но присвоили его в другой Binary. По-моему это и было нужно. Или я не прав? Код: A a1(); A *pa = &a1; Нужна обратная ситуация. Мы не знаем адреса В, нам нужно его получить и записать в А по некоторому смещению.  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от mazzy
			
			 
Эк вас плющит... 
		
	X++ основан на java. Java не содержит указателей (принцип у нее такой). Если хотите понять как получить адрес в X++, то ищите ответ на ресурсах по java.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			поищите например здесь 
		
		
		
		
		
		
			
		
		
		
		
	http://www.javaworld.com/isearch?qt=...id=1&st=1&rf=0 вам нужно определиться как работать со ссылками в джаве. после этого вернетесь к аксапте  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2 ivas 
		
		
		
		
		
		
			Извините, но, по-моему, в дискуссии с Lucky13 вы пропустили ответ. Используйте метод Binary.Binary() 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от AndyD
			
			 
2 ivas 
		
	Извините, но, по-моему, в дискуссии с Lucky13 вы пропустили ответ. Используйте метод Binary.Binary()  | 
| 
	
 |