Ошибка Internal Error: L3118 при попытке линковки obj файла с delphi

Тема в разделе "WASM.BEGINNERS", создана пользователем SOA, 15 авг 2010.

  1. DoctorWho

    DoctorWho New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2010
    Сообщения:
    87
  2. SOA

    SOA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2010
    Сообщения:
    67
    DoctorWho
    Эта утилита работает только с lib файлами, об этом в helpe написано.
    Также об этом написано тут

    http://www.rsdn.ru/forum/delphi/1595072.flat.aspx

    в посте в конце.
    Правда там почему то пишут что с помощью masm32 можно получить omf obj файлы, но я к этому отношусь скептически :/
     
  3. jabocrack

    jabocrack New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2010
    Сообщения:
    96
    скомпилировал ваш пример на delphi 2010. запускается, но вываливается с кодом исключения c0000005(runtime error 216). Исключение возникает при инициализации rtl delphi.
    То есть до бряка на Application.Initailaze.
     
  4. DoctorWho

    DoctorWho New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2010
    Сообщения:
    87
    Нашёл кое что:
    http://qunpack.ahteam.org/?p=42

    + У меня есть Delphi 3. Если нужны какие-нибудь файлы могу выложить. Delphi 3 как сказал JCronuz компилит в Intel OMF, который читабелен LINK.EXE от MS.
     
  5. SOA

    SOA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2010
    Сообщения:
    67
    DoctorWho
    Ничего утверждать не буду, но на одном из форумов ка то читал что все зависит от версии Tasm и MASM и что если версия <=3 то они выдают obj файл совместимый с delphi проектами. Если версия выше 3 то форматы уже становятся несовместимыми т.к. microsoft и borland решили исползовать в своих приложениях свои форматы obj файлов.

    P.S. а как там в третьей версии с компонентами delphi, в целом тоже самое что и в более поздних или сильно отличается?
     
  6. DoctorWho

    DoctorWho New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2010
    Сообщения:
    87
  7. SOA

    SOA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2010
    Сообщения:
    67
    Да я найду потом если что, просто интересно :)
     
  8. DoctorWho

    DoctorWho New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2010
    Сообщения:
    87
    Ну там по крайней мере папка bin целиком с волшебным компилятором есть) берите поковырять интересно. Возможно решит вашу проблему.

    З.Ы. ну если конечно у вас не Dial-Up XD...
     
  9. SOA

    SOA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2010
    Сообщения:
    67
    DoctorWho
    За отзывчивость оно конечно спасибо, да только вон оно што, тройка при ее размерах врятли поможет в моей проблеме.
     
  10. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    SOA
    Ну в принципе, у меня такой же мазохизм иногда случается, только еще хуже: С->asm->obj(delphi)
    Но 5 компилер меня никогда не подводил... я использую Борландовский TASM32.EXE 5.0, размер ехе - 184320 байт.
    ...
    Кстати, подробное описание ошибки 3118 не нашли?
     
  11. SOA

    SOA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2010
    Сообщения:
    67
    gorodon
    Так у меня то тоже 5 TASM, вот только почемуто obj с delphi не хочет линковаться. Не могли бы вы проверить у себя мой код, скомпилируется или нет, мало ли.
    Описания ошибки не нашел.
     
  12. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    Код (Text):
    1. push bx
    2. mov bx,WORD PTR a+2    ;bx<=== high word of a
    3. mov WORD PTR x,ax    ;low word of x<=== ax
    4. mov WORD PTR x+2,bx    ;high word of x<=== bx
    5. pop bx
    этот код нарушает выравнивание стека на двойное слово - суть корень зла под нт
     
  13. SOA

    SOA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2010
    Сообщения:
    67
    Хотел было написать в службу техподдержки borland, но потом передумал, там мало того что кидают на сайт какогото посредника

    http://supportline.microfocus.com/xmlloader.asp?type=home

    который занимается как я понял поддержкой продуктов не только borland'а, так там еще и регистрироватся надо.
     
  14. SOA

    SOA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2010
    Сообщения:
    67
    Rockphorr
    Не знаю что он там нарушает, но этот пример как раз рабочий.
     
  15. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    SOA
    Тебе не кажется, что ты сам усложняешь работу линкера, вставляя объявление функций и {$L ...} не в implementation (как положено), а в interface, да еще и до объявления глобальной переменной, на которую ссылается obj-файл ?

    Rockphorr
    push "нарушает", pop восстанавливает и между ними нет не только вызовов апи, но и вообще никаких обращений к стеку
     
  16. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    SOA

    Попробовал... вообщем, надо переменные определить:
    a32 DD 0
    b32 DD 0
    c32 DD 0
    d32 DD 0

    -после этого у меня заработало,

    EXTRN ESPV: DWORD - это изврат конечно ...
     
  17. SOA

    SOA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2010
    Сообщения:
    67
    leo
    Опытным путем установлено что линковщику всеравно.

    gorodon
    Почему изврат? :)
    Я думаю порой очень даже нужная вещь, хотя конечно можно использовать и указатель на переменную.
     
  18. SOA

    SOA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2010
    Сообщения:
    67
    gorodon
    Да действительно если определить переменные, то delphi не ругается и в другом коде тоже.
    Спасибо!
     
  19. DoctorWho

    DoctorWho New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2010
    Сообщения:
    87
    Интересно, а почему дельфи брыкается на не инициализированных данных. Мб если секцию данных после кода поставить, а в секции данных все не инит. данные в конец, то всё будет нормально? Т.к. если определять массив какой-нить огромный, но изначально пустой, или просто много переменных, то размер файла подлетит. Неудобно ИМХО.
     
  20. SOA

    SOA New Member

    Публикаций:
    0
    Регистрация:
    31 май 2010
    Сообщения:
    67
    DoctorWho
    Не думаю что ктонибудь сможет вам гарантировать что линковщик втавит данные из obj файла именно в конец, проекта delphi.
    В моем понимании например весь экзешник состоит из нескольких секций
    1Сегмент данных(.DATA)
    2Сегмент кода(.CODE)
    3Сегмент неинициализированных данных(.DATA?)
    4Сегмент стэка(.STACK)
    И я так думаю что независимо от исходников компилятор собирает все именно так.
    Но могу и ошибаться.