Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.06.12;
Скачать: CL | DM;

Вниз

Перевести 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.009 c
15-1298541431
И. Павел
2011-02-24 12:57
2011.06.12
Как явно привести тип массива в яве?


2-1299310206
Alex_C
2011-03-05 10:30
2011.06.12
Согласованность получения данных


15-1298382163
fs
2011-02-22 16:42
2011.06.12
восстановить данные удаленного раздела флешки


2-1299227899
Leon-Z
2011-03-04 11:38
2011.06.12
Многозадачность. TThread.


3-1260193959
Бульбаш
2009-12-07 16:52
2011.06.12
Как правильно получить имя поля по дабл-клику на ячейке