Читаем Применение Windows API полностью

 HEx(HRESULT hr, char const * str = 0) : _hr (hr), _str (str) {}

 void Display(int x, int y, Canvas& canvas) {

  if (_str != 0) {

   canvas.Text (x, y, _str);

   y += 20;

  }

  if (FAILED (_hr)) {

   char * msg;

   ::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, _hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), reinterpret_cast(&msg), 0, 0);

   canvas.Text(x, y, msg);

   ::LocalFree(msg);

  }

 }

private:

 HRESULT _hr;

 char const * _str;

};

Далее: Будет представлен типичный код. Я только должен объяснить, что такое Автоматизация.

<p>Обертка для автоматизации</p>Автоматизация

Перевод А. И. Легалова

Англоязычный оригинал находится на сервере компании Reliable Software

Мне бы хотелось получить море информации из запущенной копии Microsoft Developers Studio. Это должно быть простой задачей, т.к. DevStudio, подобно многим другим приложениям MS, предоставляет его интерфейсы через OLE Автоматизацию. Не столь просто! Как Вы увидите, Microsoft решил, что клиенты интерфейсов автоматизации VC ++ будет или использовать Visual Basic, или внутренних умных мастеров DevStudio. Я, с другой стороны, люблю программировать на C++ (Вам не кажется, что Microsoft Visual C++ должен быть переименован в Microsoft Visual MFC Wizard? Это принизило C++ до роли языка сценариев для MFC.)

В любом случае, когда я выяснил, как надо делать, остальное оказалось не быть слишком трудным. Вы только должны выяснить, где вся необходимая информация сохраняется в реестре. В частности IID всех интерфейсов. Совет: используйте OLE-COM Object Viewer, который поставляется с VC ++, чтобы просмотреть библиотеки типов. Было бы вообще великолепно, если бы Microsoft предоставлял исходные файлы или obj файлы с определениями идентификаторов интерфейсов. В существующей же ситуации я должен копировать их из Object Viewer'а и вставлять их в нужное место. Ниже приводится пример.

static const IID IID_IApplication = { 

 0xEC1D73A1, 0x8CC4, 0x11CF, { 0x9B, 0xE9, 0x00, 0xA0, 0xC9, 0x0A, 0x63, 0x2C }

};

Итак, как получить управление выполняющейся копией DevStudio? В начале вы должны создать OLE объект. Для этого необходим идентификатор класса этого объекта. Вы можете получить идентификатор класса от системы (эта информация хранится в реестре), если знаете программный идентификатор. Программный идентификатор, устроен так чтобы читаться человеком. Конечно, каждый человек знает, что Developer Studio идет под именем "MSDEV.APPLICATION". Это так просто.

Имея идентификатор класса, мы можем создать наш SObject. Мы передаем значение параметра запуска как true, потому что хотим соединиться с выполняющейся копией MSDEV.APPLICATION, если это возможно. Получение интерфейса из SObject столь же просто как создание экземпляра шаблона SObjFace с соответствующими параметрами. Итак, нашей отправной точкой будет, интерфейс к приложению.

CLSID idMsDev;

HRESULT hr = ::CLSIDFromProgID(L"MSDEV.APPLICATION", &idMsDev);

if (FAILED (hr)) throw HEx(hr, "Couldn't convert prog id to class id");

SObject obj(idMsDev, true);

SObjFace app(obj);

Обратите внимание, что строка, которую Вы передаете к CLSIDFromProgID, должна использовать кодировку Unicode. Помещение L перед строковым литералом обеспечивает это.

Я надеюсь, что Вы можете оценить простоту этого кода. Он почти столь же прост, как и его VB эквивалент.

Dim app as Application

Set app = GetObject(, "MSDEV.APPLICATION")

if (app = NULL)

 Set app = CreateObject("MSDEV.APPLICATION")

Теперь давайте что-нибудь сделаем с этим интерфейсом. Так случилось, что IApplication имеет член Visible, который Вы можете установить или получить. Когда Вы устанавливаете Visible в истину, окно приложения становится видимым. Ниже приводится синтаксис для «установки» члена. Обратите внимание, что в OLE Вы должны использовать обозначения с именами VARIANT_BOOL и VARIANT_TRUE вместо bool и true. Это делается ради совместимости с Basic (что делает Билла счастливым).

VARIANT_BOOL b = VARIANT_TRUE;

app->put_Visible(b);

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных