Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > "Маленький" COM в Linux


Автор: EnergoHokum 22.6.2007, 08:14
Подскажите, есть программа (моя) под винду, там реализуется что-то вроде урезанного COM-а. Хотел перенести его под Linux (там системозависимого кода почти нет), и при компиляции такого куска
Код

struct testIface// -- interface
{
    virtual void __stdcall FTI1(void)=0;
    virtual void __stdcall FTI2(void)=0;
    virtual unsigned long __stdcall AddRef(void)=0;
    virtual unsigned long __stdcall Release(void)=0;
    virtual unsigned long __stdcall QueryInterface(int ident,void** ppv)=0;
};

начинается непонятная ругань. Точно привести не могу, это дома осталось, но под виндой компилируется без вопросов. На винде - компилятор gcc 3.4.2, на линухе - 4.1.какой-то. В чём может быть проблем?

Автор: MAKCim 22.6.2007, 08:27
нет в GCC __stdcall, есть stdcall
пиши так
Код

__attribute__((stdcall))
virtual void FTI2(void) = 0;

а для лучшего переноса пользуйся препроцессором
Код

#if <windows>
    #define stdcall    __stdcall
#elif <linux>
    #define stdcall    __attribute__((stdcall))
#endif

Автор: EnergoHokum 22.6.2007, 08:49
Хм, а я grep-ом погонял по include-ам системным - там было __stdcall, хотя, может, переопределялось где, сегодня подробнее посмотрю. Спасибо за хелп!

Автор: bsa 22.6.2007, 12:56
Возможно, в gcc под Windows (mingw?) введен специальный макрос __stdcall, который переводится в __attribute__((stdcall)) не этапе обработки препроцессором.

Автор: DogStyle 19.7.2007, 08:06
MAKCim,  smile 
Добавиь нечего.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)