С++ и MS COFF

Discussion in 'LANGS.C' started by Sashok, Feb 14, 2010.

  1. Sashok

    Sashok New Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2009
    Messages:
    52
    Всем привет.
    Имею несколико неплохих програмок написаных на FASM.
    Подскажите пожалуста как можно эти програмки внедрить в
    C++ прграмму?
    Компилятор FASM'а умеет создавать MS Coff файлы, проблемма
    собственно в том, что я не знаю как их использовать в программах C++.
    Помогите хто чем может?
     
  2. GoldFinch

    GoldFinch New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2008
    Messages:
    1,775
    преобразовать эти .obj в .lib
     
  3. Sashok

    Sashok New Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2009
    Messages:
    52
    Не могли бы вы немного подробней
    описать етот процес.
     
  4. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    Sashok
    проэкспортировать интерфейсные функции в какойнить из понимаемых С++ конвенций (например, С)

    проэкстернить их заголовки в С++ сорсе.

    пользоваться
     
  5. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    совершенно не нужно
     
  6. KeSqueer

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    Code (Text):
    1. #include <stdio.h>
    2. #include <tchar.h>
    3.  
    4. extern "C" {
    5. unsigned __cdecl factorial(unsigned);
    6. unsigned __stdcall fibonacci(unsigned);
    7. }
    8.  
    9. int _tmain(void)
    10. {
    11.     unsigned    val;
    12.  
    13.     _tscanf_s(__T("%u"), &val);
    14.  
    15.     _tprintf_s(__T("factorial(%u) = %u\n"), val, factorial(val));
    16.     _tprintf_s(__T("fibonacci(%u) = %u\n"), val, fibonacci(val));
    17. }
    Code (Text):
    1. format  MS COFF
    2.  
    3. public  factorial as '_factorial'       ; __cdecl convention
    4. public  fibonacci as '_fibonacci@4'     ; __stdcall convention
    5.  
    6. section '.text' code readable executable
    7.  
    8. factorial:
    9.         mov     ecx, [esp+4]
    10.         xor     eax, eax
    11.         inc     eax
    12.         jecxz   .finish
    13.         xor     edx, edx
    14.     .loop:
    15.         mul     ecx
    16.         loop    .loop
    17.     .finish:
    18.         retn
    19.  
    20. fibonacci:
    21.         mov     eax, [esp+4]
    22.         xor     ecx, ecx
    23.         xor     edx, edx
    24.         or      ecx, eax
    25.         mov     eax, edx
    26.         jz      .finish
    27.         inc     edx
    28.     .loop:
    29.         xadd    eax, edx
    30.         loop    .loop
    31.     .finish:
    32.         retn 4
    В настройках проекта в "Компоновщик/Ввод/Дополнительные зависимости" добавить путь к .obj файлу.
     
  7. KeSqueer

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    Если проекты на FASM используют API, то в продолжение примера см. FASM\EXAMPLES\MSCOFF.
     
  8. Sashok

    Sashok New Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2009
    Messages:
    52
    Спасибо большое,вы мне очень помогли.
     
  9. Sashok

    Sashok New Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2009
    Messages:
    52
    KeSqueer ваш С++ код не компилируется(Microsoft Visual Studio .NET 2003).
    Я его немного изменил:

    #include <stdio.h>
    #include <tchar.h>

    extern "C" {
    unsigned __cdecl factorial(unsigned);
    unsigned __stdcall fibonacci(unsigned);
    }

    int _tmain(void)
    {
    unsigned val;

    scanf(__T("%u"), &val);

    printf(__T("factorial(%u) = %u\n"), val, factorial(val));
    printf(__T("fibonacci(%u) = %u\n"), val, fibonacci(val));

    Теперь копилируется но видает ошибку:

    Linking...
    LIBCD.lib(wincrt0.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function _WinMainCRTStartup

    Debug/MS Coff C++.exe : fatal error LNK1120: 1 unresolved externals


    Так в чем дело?
     
  10. KeSqueer

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    1 Проект console а не gui
    2 смешивание char и tchar - ошибочно
     
  11. Sashok

    Sashok New Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2009
    Messages:
    52
    Проект консольный.
    При компиляции кода без изминений :

    MSCoffC++.cpp
    error C3861: '_tscanf_s': identifier not found, even with argument-dependent lookup
    error C3861: '_tprintf_s': identifier not found, even with argument-dependent lookup
    error C3861: '_tprintf_s': identifier not found, even with argument-dependent lookup


    Каким компилятором вы это компилировали?
     
  12. treekool

    treekool Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2008
    Messages:
    88
    Sashok
    Попробуй функцию int _tmain(void) поменяй на int WinMain или на main(), но при main, в параметрах линкера укажи /entry:"mainCRTStartup".
     
  13. KeSqueer

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    Проект собирался в 2008 студии, уверен, что в 2005 тоже должно компилироваться и линковаться.

    Если проект консольный, этой ошибки быть не может:
    Не имею под рукой 2003 .NET студию, не могу проверить. Но раз уж проблема есть, то такое должно работать:
    Code (Text):
    1. #include <stdio.h>
    2.  
    3. extern "C" {
    4. unsigned __cdecl factorial(unsigned);
    5. unsigned __stdcall fibonacci(unsigned);
    6. }
    7.  
    8. int main(void)
    9. {
    10.     unsigned    val;
    11.  
    12.     scanf("%u", &val);
    13.  
    14.     printf("factorial(%u) = %u\n", val, factorial(val));
    15.     printf("fibonacci(%u) = %u\n", val, fibonacci(val));
    16. }
    При условии, что если в настройках можно указать, использовать многобайтовую или юникод-кодировку с выбором многобайтовой.
     
  14. Sashok

    Sashok New Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2009
    Messages:
    52
    treekool,KeSqueer огромное вам спасибо все работает.