Конференция "Прочее" » CodeGear продалось Ebarcadero, вроде как :)
 
  • vuk © (08.05.08 00:41) [20]
    Хм... Мне Embarcadero вспоминаются исключительно, как производитель какой-то маловнятной глючной тулзовины для работы с БД... :(
  • Германн © (08.05.08 00:48) [21]
    А мне ничем оно не вспоминается. У меня есть ТР7.0, Д4, Д6. Все меня полностью устраивают. А мафия и кумовство пусть идут лесом.
    :)
  • Тыщ © (08.05.08 01:09) [22]
    Если бы в Delphi сделали прямой вызов функций WinAPI (call без jmp), naked функции, {$CODEALIGN x} и поддержку COFF .obj, было бы здорово.
  • Германн © (08.05.08 01:47) [23]

    > Тыщ ©   (08.05.08 01:09) [22]
    >
    > Если бы в Delphi сделали прямой вызов функций WinAPI (call
    > без jmp), naked функции, {$CODEALIGN x} и поддержку COFF
    > .obj, было бы здорово.
    >

    Ты о своём, личном?
  • Тыщ © (08.05.08 07:15) [24]
    Германн ©   (08.05.08 1:47) [23]

    > Ты о своём, личном?

    Я думаю, оное не только мне полезно было бы.
  • Игорь Шевченко © (08.05.08 09:42) [25]

    > Если бы в Delphi сделали прямой вызов функций WinAPI (call
    > без jmp),


    Это как ?
  • koha © (08.05.08 10:14) [26]

    > Тыщ ©   (08.05.08 01:09) [22]
    > Если бы в Delphi сделали прямой вызов функций WinAPI (call
    > без jmp)



    Var
     szDlgTitle,szMsg: PChar;
    begin
     szDlgTitle := '  --- Assembler Pure and Simple ---  ';
     szMsg      := 'halo world!';

     asm
       push MB_OK
       push szDlgTitle
       push szMsg
       push 0
       call MessageBox
       push 0
       call ExitProcess
     end;
    end;



    а так не канает?
  • Дмитрий С (08.05.08 10:49) [27]

    > koha ©   (08.05.08 10:14) [26]

    А теперь посмотри в CPU что получилось

    Вот так это делается =)
    program Project1;

    uses
     windows;

    var
    MessageBox : function (hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;
    begin
     MessageBox := GetProcAddress(LoadLibrary(User32), 'MessageBoxA');
     MessageBox(0, 'Hi', '', 0);
    end.

  • tesseract © (08.05.08 10:49) [28]

    > Тыщ ©   (08.05.08 01:09) [22]


    У детей свои проблемы. Delphi для офисных преложений предназначено, а не для 3D маньяков.
  • Rouse_ © (08.05.08 11:08) [29]

    > Если бы в Delphi сделали прямой вызов функций WinAPI (call
    > без jmp)

    Ты про jmp который из секции импорта делается? ;)


    > naked функции

    Пиши на асме, чем тебе пролог с эпилогом помешал?
    Да и inline уже давно появились :)


    > {$CODEALIGN x} и поддержку COFF .obj

    Зачем?
  • Игорь Шевченко © (08.05.08 11:19) [30]
    Кистате о naked-функциях: Когда мне потребовалось сымитировать их поведение, был написан такой код:

    function HSNtUserCreateWindowEx (p1,p2,p3,p4,p5,
     X, Y, Width, Height : Integer; hWndParent : HWND;
     p11, p12,p13,p14,p15 : Integer) : HWND; stdcall;
    asm
     pop ebp
     mov eax,00001157h
     mov edx,7FFE0300h
     call edx
     ret 60
    end;
  • @!!ex © (08.05.08 11:28) [31]
    > Delphi для офисных преложений предназначено, а не для 3D
    > маньяков.

    Это вы решили?
  • Тыщ © (08.05.08 13:19) [32]
    Rouse_ ©   (08.05.08 11:08) [29]

    > Ты про jmp который из секции импорта делается?

    Ага. Сейчас call -> jmp [API], а надо бы call [API].

    > Пиши на асме, чем тебе пролог с эпилогом помешал?

    Иногда хочется, чтоб ret не вставлялся. Можно было бы произвольные данные asm..end генерировать, ret зачастую все портит.
    Конечно, можно и костылями обходиться, но из-за какой мелкой отсутствующей фичи...

    >> {$CODEALIGN x} и поддержку COFF .obj
    > Зачем?

    Первое - для оптимизации, второе - для совместимости с большинством объектников, в OMF сейчас мало что может компилировать. А конвертеры глючные, для больших вещей не годятся.
    Либо Delphi очень привередлив (то invalid format, то просто не видит символы).
  • Mystic © (08.05.08 13:41) [33]
    > Ага. Сейчас call -> jmp [API], а надо бы call [API].

    Предложи другую схему?

    Адрес функции из библиотеки DLL неизвестен на этапе компиляции/линковки. Получается, чтобы реализовать твою схему, необходимо будет при загрузке EXE-файла иметь дополнительно специальную таблицу, в которой бы хранились все обращения к этой функции и их подправить. Это может быть как вызов этой функции, так и взятие адреса. Это приводит к тому, что страницы кода с памяти и на диске будут отличаться друг от друга. Возникнут проблемы с тем, чтобы организовать для нескольких приложений использование одних и тех же кодовых страниц. В общем никому не нужный геморрой. Если для какой-то функции тебе так важно не терять на промежуточный JMP, правь адрес руками :)
  • Игорь Шевченко © (08.05.08 13:52) [34]

    > Ага. Сейчас call -> jmp [API], а надо бы call [API].


    Так это не только в Delphi, не переживай
  • Тыщ © (08.05.08 14:04) [35]
    Mystic ©   (08.05.08 13:41) [33]

    Ты меня не понял. Я не хочу вызывать функции API настолько напрямую и тем самым терять всю совместимость (это годится разве что для демосценок).
    Я хочу вызывать через импорт напрямую, как это делают многие другие компиляторы.
  • Rouse_ © (08.05.08 14:06) [36]

    > Так это не только в Delphi, не переживай

    Нет, тут все-же различается. Специально проверял сторонним отладчиком, чтоб не грешить на то как отображает внутренний дизасм у обоих сред.

    У Delphi
    E8 B4FFFFFF   CALL <JMP.&user32.CreateWindowExA> ; \CreateWindowExA



    У VC++
    FF15 94514400 CALL DWORD PTR DS:[<&USER32.CreateWindowExA>] ; \CreateWindowExA

  • Игорь Шевченко © (08.05.08 14:17) [37]
    Тыщ ©   (08.05.08 14:04) [35]


    > Я не хочу вызывать функции API настолько напрямую и тем
    > самым терять всю совместимость (это годится разве что для
    > демосценок).


    пардон, какая совместимость и кого с кем имеется в виду.

    Rouse_ ©   (08.05.08 14:06) [36]


    > Специально проверял сторонним отладчиком


    убедился что в каких-то конкретных версиях конретных компиляторов это так. И что с того ? Тут экстраполяция неуместна.
  • Тыщ © (08.05.08 14:21) [38]
    Игорь Шевченко ©   (08.05.08 14:17) [37]

    > пардон, какая совместимость и кого с кем имеется в виду.

    Я так понял, Mystic говорил о вызове функций из dll напрямую, без таблицы импорта вообще. Это уже экстрим.
  • Игорь Шевченко © (08.05.08 14:24) [39]
    Тыщ ©   (08.05.08 14:21) [38]

    Да, это экстрим.

    Но все-таки я не совсем понимаю, чем тебе так jmp помешал :)
 
Конференция "Прочее" » CodeGear продалось Ebarcadero, вроде как :)
Есть новые Нет новых   [134435   +9][b:0][p:0.001]