Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> force __stdcall или что-то вроде того, cl не воспринимает __stdcall 
:(
    Опции темы
Logo
Дата 13.3.2012, 04:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Нужно сделать так, что бы конструктор обьекта не менял значение регистров в месте своего вызова.
Вернее так, что бы регистры были доступны в конструкторе в неизменном виде, из места, где вызван конструктор.
Пытаюсь обьявить его как __cdecl или __stdcall
Код

class A {
  __stdcall A() {}
}

GCC все понимает корректно. Но Visual C++, хотя и не сообщает об ошибке, все равно компилирует как thiscall. Можно ли его научить правильно воспринимать код?

Это сообщение отредактировал(а) Logo - 13.3.2012, 04:21
PM MAIL   Вверх
Dem_max
Дата 13.3.2012, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



а как ты определил что VS меняем именно на thiscall ??????


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
bsa
Дата 13.3.2012, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Logo, ты случаем не пытаешься линковать библиотеку классов созданную одним компилятором, к программе, созданной другим? Если так, то тебя ждет еще не мало "приятных" сюрпризов.
PM   Вверх
Logo
Дата 13.3.2012, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Как-как, откомпилировал, загрузил в дизасемблер, могу подробнее описать, как, если интересно. Если че, в IDA даже есть плагин псевдо-декомпилсятор, который весьма точно показывает C код функции, в том числе и тип вызова. Но лучше наверно в ручную, там элементарно)

Добавлено через 7 минут и 33 секунды
bsa
Нет, пытаюсь скомпилить даже самый простой пример, игнорирует он __stdcall, и все тут...
Код

class A {
  public:
    __stdcall A() {
    
    };   
};

int main(void)
{
  A a;
  return 0;
}



Добавлено через 12 минут и 10 секунд
Тоже самое в GCC компилится корректно...
PM MAIL   Вверх
bsa
Дата 14.3.2012, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Logo, может MSVC считает, что для нестатических методов вызовы должны быть __thiscall. А все другие модификаторы просто игнорирует. Где-нибудь написано, что __stdcall поддерживается для методов?
PM   Вверх
Logo
Дата 14.3.2012, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Не знаю, но ошибок и предупреждений он не выдает.
Версия 13.10.3077 for 80x86
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.