Re[9]: Виртуальные функции без CRT
От: fkRTTI  
Дата: 09.11.09 14:17
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, fkRTTI, Вы писали:

RTT>>Тоже сделал это, только перенес полностью свой проект туда, unresolved vftable исчезло. Зато появилось вот что:
PD>__try — __except.
PD>http://wasm.ru/print.php?article=Win32SEHPietrek2
RTT>>Я конечно понимал что отказ от CRT ведет за собой долгие танцы с бубном, но не на столько же)
PD>И не уверен, что это все.

убрал __try-__except 0 errors/0 warings, спасиб всем.
Re[6]: Виртуальные функции без CRT
От: Bell Россия  
Дата: 10.11.09 02:48
Оценка:
Здравствуйте, fkRTTI, Вы писали:

RTT>Там стоит NO! И вылазит сообщение с ошибкой:


RTT>cl : Command line warning D9025 : overriding '/GR-' with '/GR'

RTT>PModule.obj : error LNK2001: unresolved external symbol "const type_info::`vftable'" (??_7type_info@@6B@)


Проверь эту опцию для файла PModule.cpp — ее можно выставлять отдельно для каждого файла. Возможно, именно для этого файла она включена.
Любите книгу — источник знаний (с) М.Горький
Re: Виртуальные функции без CRT
От: gear nuke  
Дата: 10.11.09 17:36
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Добрый день, заказчик требует минимизировать размер исполняемого модуля, однако в проекте обширно используются виртуальные функции, во многих классах (и как следствие виртуальные деструкторы). При их использовании необходимо чтобы был включен Runtime type info и создавалась таблица type_info::vftable. Однако при отказе от CRT таблица не создается.


type_info не нужно для работы виртуальных функций. Однако, оно нужно не только для RTTI (dynamic_cast и typeid), но и для поддержки C++ исключений. Проверь ключи /EH

А>Вопрос: существуют ли реализации небольших CRT типа libctiny, wcrt и тп с поддержкой виртуальных функций?


Такой С++ runtime есть здесь, но он нужен для других случаев — поддержки С++ исключений, RTII, конструирования стических объектов (включая std::cout & Co).

А> Какие способы решения проблемы вы видите?


Необходимо добавить определение, которое должно соотвествовать внутреннему типу MSVC _TypeDescriptor
class type_info
{
  public:

    virtual ~type_info();

  private:

    mutable void* data;
};

static_assert(sizeof _TypeDescriptor == sizeof type_info, "broken type");
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[2]: Виртуальные функции без CRT
От: Erop Россия  
Дата: 11.11.09 22:44
Оценка:
Здравствуйте, Sni4ok, Вы писали:

S>увы, но виртуальные функции автоматом подгружают crt


Как, где и зачем они это делают?
Какие именно функции из CRT нужны виртуальным функциям и для чего?

У MSVC есть такая мулька, что у деструктора есть скрытый аргумент, который говорит, надо ли вызвать opertaor delete( this ) в конце деструктора. Соответственно сгенерированный компилятором виртуальный деструктор будет звать operator delete.

Но это, IMHO, можно довольно легко обойти, например заведя метод operator delete во всех корнях иерархий с виртуальными функциями. А уж в тексте этого operator delete как-нибудь обойтись без вызовов CRT.

Какие ещё есть зависимости?
Может эти функции можно просто реализовать самому? Исходники CRT ведь доступны?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.