Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];

Вниз

Перевести 3 строчки C++ -> Delphi   Найти похожие ветки 

 
reqyz   (2011-02-11 13:00) [0]

void *pFlip = (*reinterpret_cast<void***>(Surf))[11];
ptrdiff_t pDDSFlipDiff = reinterpret_cast<ptrdiff_t>(pFlip) - reinterpret_cast<ptrdiff_t>(GetModuleHandle(_T("ddraw.dll")));


 
Palladin ©   (2011-02-13 12:44) [1]

а пацаловат?


 
clickmaker ©   (2011-02-14 15:09) [2]

> (*reinterpret_cast<void***>(Surf))

почему не 5 звездочек?


 
han_malign   (2011-02-14 18:36) [3]


> почему не 5 звездочек?

- чем вам не угодил указатель на массив указателей?


 
!   (2011-02-14 18:37) [4]


> void *pFlip = (*reinterpret_cast<void***>(Surf))[11];
> ptrdiff_t pDDSFlipDiff = reinterpret_cast<ptrdiff_t>(pFlip)
> - reinterpret_cast<ptrdiff_t>(GetModuleHandle(_T("ddraw.
> dll")));


динамическое приведение типов

pFlip указатель без определения конкретного типа, видимо в дельфе это будет pointer

ptrdiff_t - некоторый тип, скорее всего определенный непосредственно в коде, а не в сторонней библиотеке.

Соответственно определяешь переменные:


Var
pFlip : Pointer;
pDDSFlipDiff : ptrdiff_t; // соответственно в дельфе должен быть такой тип :-)


а далее нужно сделать приведение типов
Surf к pFlip

а вторая строка бред какой-то :-)

в первой я так понимаю берут указатель на поверхность, а вот зачем во второй вычитают из этого указателя хандл модуля? :-(


 
DiamondShark ©   (2011-02-18 11:43) [5]

По-моему, такой язык не имеет права существовать.


 
han_malign   (2011-02-18 14:14) [6]


> По-моему, такой язык не имеет права существовать.

- а такой?

typedef void *pointer;
typedef pointer pointer_array_t[]; /*хотя вот это - согласен - не очень логично выглядит*/
typedef pointer_array_t *pointer_array_p;

pointer pFlip = (*reinterpret_cast<pointer_array_p>(Surf))[11];


 
DiamondShark ©   (2011-02-18 15:41) [7]

__исходный* код() (н_е) должен<быть_похож>[на]->вывод*испорченного_телетайпа, подключённого<<к (зашумлённой)линии с *плохо_синхронизированной частотой;


 
KSergey ©   (2011-02-18 15:47) [8]

> DiamondShark ©   (18.02.11 11:43) [5]

Есть просто криворукие программисты
Побуквенно  перевести на дельфи - выйдет ничуть не лучше.


 
han_malign   (2011-02-18 16:15) [9]


> Побуквенно  перевести на дельфи - выйдет ничуть не лучше.

- нееe - в Паскале таки придется описать тип косвенной ссылки на указатель, либо таки честно развернуть разадресацию...
pp:= PPointer(surf)^;
inc(pp, 11);
pFlip:= PPointer(pp)^;
- такой вот дядя Вирт зануда - специально ведь так сделал...


 
KSergey ©   (2011-02-18 17:00) [10]

> han_malign   (18.02.11 16:15) [9]

Можно более полный пример с типами и т.д.?
Не понимаю где проблема написать типа

:= Pointer(PPointer(surf)^ + 11);


 
oxffff ©   (2011-02-18 20:22) [11]

Это космический синтаксис при всем уважении к С++.


 
icelex ©   (2011-02-18 21:43) [12]


> reqyz   (11.02.11 13:00)
>
> void *pFlip = (*reinterpret_cast<void***>(Surf))[11];
> ptrdiff_t pDDSFlipDiff = reinterpret_cast<ptrdiff_t>(pFlip)
> - reinterpret_cast<ptrdiff_t>(GetModuleHandle(_T("ddraw.
> dll")));

человек был явно пьян, долго не мылся и у него все чесалось


 
Sapersky   (2011-02-19 01:33) [13]

"Единственное препятствие: получить адрес метода COM-объекта вызовом GetProcAddress не удастся. Это не так страшно, ведь можно создать DirectDraw-поверхность, и узнать положение метода Flip относительно базового адреса исполняемого файла, в который было произведено внедрение."
http://habrahabr.ru/blogs/programming/111339/


 
GrayFace ©   (2011-02-19 04:38) [14]

var pFlip: PChar;

pFlip:= PChar(Surf^) + 11*SizeOf(Pointer);
pDDSFlipDiff:= pFlip - GetModuleHandle("ddraw.dll");


 
TUser ©   (2011-02-19 05:33) [15]

Вам страшно, да, а вон что паскаль живородящий делает:

http://www.rapidshare.ru/1739952


 
KSergey ©   (2011-02-19 12:14) [16]

> oxffff ©   (18.02.11 20:22) [11]
> Это космический синтаксис при всем уважении к С++.

Еще раз: если побуквенно перевести на дельфи - выйдет ровно такая же ахинея.
Но ни один хоть чуточку нормальный человек так не пишет. Как минимум есть смысл объявить свои типы: сразу и читабельность повысится и удобство.

Еще надо будет на досуге подумать: чем void с пятью звездочками отличается от void с одной звездочкой, один фик адресная арифметика к указателю на void не применима.


 
oxffff ©   (2011-02-19 12:38) [17]


> Еще надо будет на досуге подумать: чем void с пятью звездочками
> отличается от void с одной звездочкой, один фик адресная
> арифметика к указателю на void не применима.


???

pp:^PPointer;
begin
{$POINTERMATH ON}
pp[1,1]:=nil;
{$POINTERMATH OFF}


 
Inovet ©   (2011-02-20 09:30) [18]

> [16] KSergey ©   (19.02.11 12:14)
> чем void с пятью звездочками отличается от void с одной
> звездочкой

Выдержкой выпитого перед написанием.


 
KSergey ©   (2011-02-20 10:29) [19]

> oxffff ©   (19.02.11 12:38) [17]

Это что? где void?


 
oxffff ©   (2011-02-20 12:08) [20]


> KSergey ©   (20.02.11 10:29) [19]
> > oxffff ©   (19.02.11 12:38) [17]
>
> Это что? где void?


(untyped pointer)
pointer=*void


> Еще надо будет на досуге подумать: чем void с пятью звездочками
> отличается от void с одной звездочкой, один фик адресная
> арифметика к указателю на void не применима.


К void с 5 *, можно применить 4 уровня адресной арифметики.


 
Игорь Шевченко ©   (2011-02-21 00:19) [21]


> Вам страшно, да, а вон что паскаль живородящий делает:


Ну не для средних умов...вполне себе настройка параметров на основании конфига. Ну сделана непривычно, но функцию вроде выполняет.


 
Игорь Шевченко ©   (2011-02-21 00:19) [22]

К тому же я не удивлюсь, если это окажется сгенерированным кодом


 
KSergey ©   (2011-02-21 17:27) [23]

> oxffff ©   (20.02.11 12:08) [20]

Дошли руки.
Побаловался я. Занятно.
К указателю на void адресная арифметика действительно не применима, однако к указателю на указатель - уже отлично применима. Видимо логично: размер указателя на void - он  известен...



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

Форум: "Прочее";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.003 c
2-1295769353
Holod
2011-01-23 10:55
2011.06.12
DBLookupComboBox и фильтрация


2-1296798910
ZeaL
2011-02-04 08:55
2011.06.12
как установить связь по протоколу UDP с сервером движков hl (cs


1-1256627612
Lionel
2009-10-27 10:13
2011.06.12
Вывод числа прописью в компонент Memo в FastReport


2-1298879860
petvv
2011-02-28 10:57
2011.06.12
Установить Primary Key = 0


15-1298291318
Baks
2011-02-21 15:28
2011.06.12
Уникальный идентификтор компьютера





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