Конференция "Прочее" » Перевести 3 строчки C++ -> Delphi
 
  • reqyz (11.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 © (13.02.11 12:44) [1]
    а пацаловат?
  • clickmaker © (14.02.11 15:09) [2]
    > (*reinterpret_cast<void***>(Surf))

    почему не 5 звездочек?
  • han_malign (14.02.11 18:36) [3]

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

    - чем вам не угодил указатель на массив указателей?
  • ! (14.02.11 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 © (18.02.11 11:43) [5]
    По-моему, такой язык не имеет права существовать.
  • han_malign (18.02.11 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 © (18.02.11 15:41) [7]
    __исходный* код() (н_е) должен<быть_похож>[на]->вывод*испорченного_телетайпа, подключённого<<к (зашумлённой)линии с *плохо_синхронизированной частотой;
  • KSergey © (18.02.11 15:47) [8]
    > DiamondShark ©   (18.02.11 11:43) [5]

    Есть просто криворукие программисты
    Побуквенно  перевести на дельфи - выйдет ничуть не лучше.
  • han_malign (18.02.11 16:15) [9]

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

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

    - такой вот дядя Вирт зануда - специально ведь так сделал...
  • KSergey © (18.02.11 17:00) [10]
    > han_malign   (18.02.11 16:15) [9]

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

    := Pointer(PPointer(surf)^ + 11);
  • oxffff © (18.02.11 20:22) [11]
    Это космический синтаксис при всем уважении к С++.
  • icelex © (18.02.11 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 (19.02.11 01:33) [13]
    "Единственное препятствие: получить адрес метода COM-объекта вызовом GetProcAddress не удастся. Это не так страшно, ведь можно создать DirectDraw-поверхность, и узнать положение метода Flip относительно базового адреса исполняемого файла, в который было произведено внедрение."
    http://habrahabr.ru/blogs/programming/111339/
  • GrayFace © (19.02.11 04:38) [14]
    var pFlip: PChar;

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

  • TUser © (19.02.11 05:33) [15]
    Вам страшно, да, а вон что паскаль живородящий делает:

    http://www.rapidshare.ru/1739952
  • KSergey © (19.02.11 12:14) [16]
    > oxffff ©   (18.02.11 20:22) [11]
    > Это космический синтаксис при всем уважении к С++.

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

    Еще надо будет на досуге подумать: чем void с пятью звездочками отличается от void с одной звездочкой, один фик адресная арифметика к указателю на void не применима.
  • oxffff © (19.02.11 12:38) [17]

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


    ???

    pp:^PPointer;
    begin
    {$POINTERMATH ON}
    pp[1,1]:=nil;
    {$POINTERMATH OFF}
  • Inovet © (20.02.11 09:30) [18]
    > [16] KSergey ©   (19.02.11 12:14)
    > чем void с пятью звездочками отличается от void с одной
    > звездочкой

    Выдержкой выпитого перед написанием.
  • KSergey © (20.02.11 10:29) [19]
    > oxffff ©   (19.02.11 12:38) [17]

    Это что? где void?
  • oxffff © (20.02.11 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 уровня адресной арифметики.
  • Игорь Шевченко © (21.02.11 00:19) [21]

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


    Ну не для средних умов...вполне себе настройка параметров на основании конфига. Ну сделана непривычно, но функцию вроде выполняет.
  • Игорь Шевченко © (21.02.11 00:19) [22]
    К тому же я не удивлюсь, если это окажется сгенерированным кодом
  • KSergey © (21.02.11 17:27) [23]
    > oxffff ©   (20.02.11 12:08) [20]

    Дошли руки.
    Побаловался я. Занятно.
    К указателю на void адресная арифметика действительно не применима, однако к указателю на указатель - уже отлично применима. Видимо логично: размер указателя на void - он  известен...
 
Конференция "Прочее" » Перевести 3 строчки C++ -> Delphi
Есть новые Нет новых   [134431   +11][b:0][p:0.001]