Форум: "Прочее";
Текущий архив: 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