|  28.04.2006, 12:53 | #1 | 
| Участник |  Как получить указатель на объект? 
			
			Доброго времени суток! Собствено, сабж. Есть экземпляр класса Binary. Требуется получить его адрес и запихнуть в другой Binary. Вот такое извращение. Не спрашивайте, зачем это надо  )) | 
|  | 
|  28.04.2006, 13:05 | #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);
} | 
|  | 
|  28.04.2006, 13:06 | #3 | 
| Участник | 
			
			У класса Binary есть метод Attach, он делает именно это. Действует по-моему так Если в переменной A со смещением X находится указатель на переменную B, то нужно писать B.Attach(A.dword(X), sizeof(B)) | 
|  | 
|  28.04.2006, 13:16 | #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). | |
|  28.04.2006, 13:28 | #5 | 
| Участник | Цитата: 
		
			Сообщение от Lucky13
			
			 У класса Binary есть метод Attach, он делает именно это. Действует по-моему так Если в переменной A со смещением X находится указатель на переменную B, то нужно писать B.Attach(A.dword(X), sizeof(B))  Для attach первым аргументом идет адрес. Который нам нужно узнать. Увы %( | 
|  | 
|  28.04.2006, 13:37 | #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;
}  | 
|  | 
|  28.04.2006, 13:40 | #7 | 
| Участник | Цитата: 
		
			Сообщение от ivas
			
			  Есть экземпляр класса Binary. Требуется получить его адрес и запихнуть в другой Binary A - другой Binary, в смещении X лежит указатель, который должен указывать на B. Да, мы не узнали адреса B, но присвоили его в другой Binary. По-моему это и было нужно. Или я не прав? | 
|  | 
|  28.04.2006, 13:43 | #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;
} | 
|  | 
|  28.04.2006, 13:50 | #9 | 
| Участник | 
			
			2 Lucky13  Attach() присваивает объекту Binary указатель на память, передаваемую в первом аргументе. A.dWord(X) - это не указатель на память, а значение, хранящееся в памяти по смещению X. Т.е. объект начинает ссылаться на неопределенное место в памяти, по-этому при пропытке обратиться туда возникает GPF 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  28.04.2006, 13:51 | #10 | 
| Участник | Цитата: 
		
			Сообщение от ivas
			
			 Требуется получить его адрес и запихнуть в другой Binary. X++ основан на java. Java не содержит указателей (принцип у нее такой). Если хотите понять как получить адрес в X++, то ищите ответ на ресурсах по java. | 
|  | 
|  28.04.2006, 13:52 | #11 | 
| Участник | Цитата: 
		
			Сообщение от Lucky13
			
			 Здесь B - экземпляр объекта Binary A - другой Binary, в смещении X лежит указатель, который должен указывать на B. Да, мы не узнали адреса B, но присвоили его в другой Binary. По-моему это и было нужно. Или я не прав? Код: A a1(); A *pa = &a1; Нужна обратная ситуация. Мы не знаем адреса В, нам нужно его получить и записать в А по некоторому смещению. | 
|  | 
|  28.04.2006, 13:54 | #12 | 
| Участник | Цитата: 
		
			Сообщение от mazzy
			
			 Эк вас плющит... X++ основан на java. Java не содержит указателей (принцип у нее такой). Если хотите понять как получить адрес в X++, то ищите ответ на ресурсах по java. | 
|  | 
|  28.04.2006, 13:58 | #13 | 
| Участник | 
			
			поищите например здесь http://www.javaworld.com/isearch?qt=...id=1&st=1&rf=0 вам нужно определиться как работать со ссылками в джаве. после этого вернетесь к аксапте | 
|  | 
|  28.04.2006, 13:58 | #14 | 
| Участник | 
			
			2 ivas Извините, но, по-моему, в дискуссии с Lucky13 вы пропустили ответ. Используйте метод Binary.Binary() 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  28.04.2006, 14:02 | #15 | 
| Участник | Цитата: 
		
			Сообщение от AndyD
			
			 2 ivas Извините, но, по-моему, в дискуссии с Lucky13 вы пропустили ответ. Используйте метод Binary.Binary() | 
|  |