Здесь самая лучшая часть истории. Вы могли бы подумать: «О, право, большое дело! Легко придумать эти идеи теперь, после того, как OLE находится на рынке для почти десятилетие». Сообщаю, что искренне Ваш был тем, кто работал когда-то в Microsoft. Вскоре, после выпуска OLE 1.0, я записал эти идеи и послал ответственным людям. Короче говоря, идеи были приняты как допустимые, но отклонены, потому что уже имелось слишком много кода, записанного в спецификациях OLE (обычное дело в Microsoft). Никто из менеджеров не пожелал рисковать, перепроектируя OLE.
Итак, теперь мы имеем подсчет ссылок, агрегацию и все прочее. Мораль истории:
Нет ничего святого, что касается OLE. Это может быть сделано лучше!
Но мы все же можем иметь пирог и есть его? Другими словами, можно формировать «интеллектуальное OLE» на вершине «другого OLE»? Ваша ставка! Идите прямо к следующей обучающей программе.
Оболочка из классов для OLE
Англоязычный оригинал находится на сервере компании Reliable Software
Построив интеллектуальное OLE на вершине старого, Вы узнаете другое OLE
Прежде всего Вы должны сообщить миру, что собираетесь использовать OLE. Имеется небольшой класс, который будет делать это за Вас. Только внедрите объект этого класса в некоторый высокоуровневый сконструированный объект прежде, чем Вы что-либо сделаете с OLE и удалите его после того, как отработаете с OLE. В Windows программе первоосновой для UseOle является «Контроллер».
class UseOle {
public:
UseOle() { OleInitialize (0); }
~UseOle() { OleUninitialize (); }
};
class Controller {
public:
Controller(HWND hwnd, CREATESTRUCT* pCreate);
~Controller() { PostQuitMessage(0); }
void Paint(HWND hwnd);
private:
UseOle useOle;
};