подключение функции из obj файла в BCB6

Тема в разделе "LANGS.C", создана пользователем Programister, 21 июл 2007.

  1. Programister

    Programister New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2007
    Сообщения:
    8
    уже на двух форумах рисовал этот вопрос,
    немогу никак подключить,
    есть вообщем asm ф-я:
    .686
    .model flat ,stdcall
    option casemap:none
    include c:\masm32\include\windows.inc
    include c:\masm32\include\user32.inc
    includelib c:\masm32\lib\user32.lib
    include c:\masm32\include\kernel32.inc
    includelib c:\masm32\lib\kernel32.lib
    .data
    MsgBoxCaption db "hello",0
    MsgBoxText db "word!",0
    .code
    mess proc
    invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK ;
    ret 0
    mess endp
    end

    с помощью команды masm'у 9 создаю obj файл
    C:\masm32\bin\ml /nologo /c /coff /Cp /IC:\masm32\include\ example.asm

    получившийся obj файл с помощью coff2omf преобразую в omf формат
    coff2omf.exe example.obj example_omf.obj

    далее добавляю его в проект через меню
    Project--->Add to Project...--->выбираю файл example_omf.obj

    в коде пишу следующее:

    extern "C" void _stdcall mess();
    int main()
    {
    mess();
    return 0;
    }

    и получаю:
    [Linker Error] Unresolved external 'mess' referenced from C:\BUILDER\000\UNIT1.OBJ

    вопрос:
    как указать билдеру искать функцию в example_omf.obj а не в UNIT1.OBJ?
    или как правильно подключить example_omf.obj?
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Programister
    Что внутри example_omf.obj?

    Цитата из help'а: "Coff2Omf is a command line tool that converts a COFF import library file (InputFile) to a corresponding OMF import library file (OutputFile) ... Coff2Omf converts the publicly exported symbols in the COFF import library to a corresponding set of symbols in the OMF import library. Coff2Omf enables C++Builder users to link to Microsoft and other third-party DLLs that use the COFF format. Coff2Omf does not convert .OBJ files."
     
  3. Programister

    Programister New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2007
    Сообщения:
    8
    да точно непосмотрел я в хелпе
    щас попробовал корректно создать lib с помощью команд
    C:\masm32\bin\ml /nologo /c /coff /Cp /IC:\masm32\include\ example.asm
    C:\masm32\bin\link -lib example.obj
    coff2omf.exe example.lib example_omf.lib
    затем также подключал example_omf.lib
    в итого тоже самое сообщение.

    >Что внутри example_omf.obj?
    тоже самое что и в новой example_omf.lib - ничего:
    несколько закарючек первые 19 байт и 21d в последнем 512 байте все остальное нули

    видимо coff2omf.exe неправильно работает
    я пробовал разные параметры типа -lib:ms -lib:ca все вроде одинаково
    coff - формат билдера не устраивает.
    что делать?
     
  4. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    Programister
    Юзай Coff2omf от Walter Oney. Здесь на сайте вроде есть.
     
  5. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    Просто ради интереса посмотри что получается в hex-редакторе. Я имею ввиду сконвертированный файл. Сразу поймешь почему не линкуется.
     
  6. Programister

    Programister New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2007
    Сообщения:
    8
    немогу найти Coff2omf от Walter Oney
    дай пожалуста ссылку
     
  7. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Programister
    попробовал корректно создать lib
    Так ты создашь _статическую_ библиотеку. Borland'овская же утилита для конвертирования библиотек импорта, то есть тех, которые получаются, когда линкуешь в dll'ку.

    что делать?
    Например, рассмотреть вариант использования tasm или inline asm?
     
  9. Programister

    Programister New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2007
    Сообщения:
    8
    спасибо за ссылку теперь obj файлы пополнее получаются и весят поменьше
    но проект всеравно компилиться нихочет теперь говорит:
    [Linker Fatal Error] Fatal: Unable to open file 'USER32.OBJ'
    провел поиск на всем диске нигде нет, что за user понятия не имею!?
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Programister
    Достаточно убрать в командной строке ключ /coff. И никакие конвертеры типа coff2omf не нужны. Между прочим, coff2omf by Walter Oney имеет неприятное свойство портить некоторые релоки в обьектнике.
     
  11. Programister

    Programister New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2007
    Сообщения:
    8
    все разобрался всем спасибо
    особенно Mental_Mirror за ссылку

    одного coff2omf было недостаточно нужно было ещё в omf2d
    преобразовывать получавшийся файл и тогда все нормально работало!
     
  12. Programister

    Programister New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2007
    Сообщения:
    8
    да тоже верно
    но только если потом его в omf2d ещё преобразовывать.
    Quantum можно по подробнее какие релоки