C++ в АСМ

Тема в разделе "WASM.ASSEMBLER", создана пользователем Rito, 3 июн 2008.

  1. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Вот такой код есть на си
    Код (Text):
    1. #include "windows.h"
    2. #ifdef __cplusplus
    3.    extern "C" {
    4. #endif
    5. void tyu(void);
    6. #ifdef __cplusplus
    7.    }
    8. #endif
    9.  
    10. void tyu(void)
    11. {
    12.     MessageBox(0,"saa",0,0);
    13.     static int temp = 0;
    14.     //static float tem = 0.0f;
    15.     temp ++;
    16.     //tem ++;
    17. }
    При компиляции я получаю obj и спокойно подключаю к асм прожекту.
    Но стоит раскоментировать 2 строки и при подключении полученного obj файла MASM выдаёт
    Бросил в папку с асмом эту либу. Теперь он пишет
     
  2. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  3. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Дык у меня есть уже EP в асм проекте. От сишной obj мне нужна только скомпиленная функция. Зачем для неё EP указывать. Т.е. эту tyu мне просто надо скомпилить на С++ и вставить в асм. В программе же не может быть 2 EP.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    дык обе папки надо указывать в параметрах ком. строки:)
     
  5. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Это появляется не при компиляции сишной функции, а уже при компиляции на МАСМ
    Т.е. я вроде бы как получил obj нужной мне фу-ии, но при внедрении этого obj в MASM он и выдаёт вышеописанную ошибку.
    Код (Text):
    1. #include "windows.h"
    2. #ifdef __cplusplus
    3.    extern "C" {
    4. #endif
    5. void tyu(void);
    6. #ifdef __cplusplus
    7.    }
    8. #endif
    9.  
    10. void tyu(void)
    11. {
    12.     MessageBox(0,"saa",0,0);
    13.     static int temp = 0;
    14.     temp ++;
    15. }
    Вот этот код прекрасно компилируется в obj и вставляется в МАСМ. В отладчике это прекрасно видно, что он есть.
    Код (Text):
    1. #include "windows.h"
    2. #ifdef __cplusplus
    3.    extern "C" {
    4. #endif
    5. void tyu(void);
    6. #ifdef __cplusplus
    7.    }
    8. #endif
    9.  
    10. void tyu(void)
    11. {
    12.     MessageBox(0,"saa",0,0);
    13.     static int temp = 0;
    14.     static float tem = 0.0f;
    15.     temp ++;
    16.     tem ++;
    17. }
    А вот если я скомпилирую этот код, полученный obj внедряю в МАСМ и вот тут он являет мне ошибку cannot open file "uuid.lib"
     
  6. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Вот оно. Оказывается сишная функция отлично внедряется. Написал и классы и прочее, никаких проблем. НО до тех пока в сишной функции не появится работа с запятой. Как только я попытаюсь сложить что нить нецелочисленное, при компиляции такого obj файла, тут же он начинает требовать uuid.lib. Сравнил на выходе асм листы, возможно дело в _fltused, который появляется при работе с не целым числом. Кто то же наверняка сталкивался с подобным.
     
  7. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    Я не сталкивался. Но операции над числами с плавающей запятой - достаточно сложная штука и их реализация может зависеть, например, от проца. Вот ты в тексте пишешь число с запятой, а компилятор в тексте объявляет _fltused, а где то, в стандартных либах языка есть строки, наподобии:
    ifdef _ftlused
    include "что то, что лежит в uuid.lib"
    endif
    Т.е. в этой библиотеке лежит объектный файл, который каким то макаром имеет отношение к вычислениям с плавающей запятой. И тебе, при использовании нецелочисленных, придется либо подключать эти библиотеки, либо писать какие то аналоги реализаций.