Форум программистов, компьютерный форум CyberForum.ru

Подключиться к COM-объекту, вызвать функции и прочитать таблицы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не чиститься память при разрушении класса http://www.cyberforum.ru/cpp-beginners/thread1091892.html
Сделал небольшой пример tcp сервера. http://rusfolder.com/39763465 Он принимает строки, разделенные \n и пересылает их обратно. Если слать небольшими порциями пакеты, то всё работает нормально. Если я вышлю очень большую порцию пакета, например "test\ntest\ntest\n" и так. несколько тысяч, cервер заполняет массив writeBuffer данными и память раз растает до 100MB, это нормально и понятно. НО...
C++ Инкапсуляция строк Приветствую! Как сделать инкапсуляцию строк? Например: Допустим, для целых чисел можно использовать: enum class Colors { RED = 0, GREEN = 12, BLUE = 23, }; http://www.cyberforum.ru/cpp-beginners/thread1091884.html
При помощи цикла показать на экран календарь текущего месяца C++
При помощи цикла показать на экран календарь текущего месяца.
C++ Нажатие клавиши без ожидания Enter
Как в c++ сделать так, что бы при нажатии какой-то клавиши, программа(консоль) сразу выполняла действие , а не ждала пока введут этот символ. Например if (c == "d") cout << "-"; только что бы прога не ждала нажатие enter, и не писала на экране букву d. Хочу типо консоль-змейки написать ???
C++ Переопредения нуля для структуры (класса) http://www.cyberforum.ru/cpp-beginners/thread1091846.html
Пишу клас дробей вида (sqrt(f)+n)/d. Нужно проверять равна ли такая дробь нулю, тоесть (f==0&&n==0) но так писать каждый раз не удобно, и нет прямого доступа к полям переменных (frac.f, frac.n, frac.d). Можно как-то переопределить ноль для класса, или оператор "==", "!=" чтоб можно было записать так frac x; ........ if (x==0) ....
C++ При помощи цикла показать на экран календарь текущего месяца. При помощи цикла показать на экран календарь текущего месяца. подробнее

Показать сообщение отдельно
Убежденный
Системный программист
Эксперт С++
15517 / 7015 / 1110
Регистрация: 02.05.2013
Сообщений: 11,452
Завершенные тесты: 1
08.02.2014, 19:59
Если COM-объект поддерживает автоматизацию, - а данном случае, скорее всего,
так и есть, - то у него должна быть библиотека типов (.tlb-файл).
Любой COM-совместимый компилятор должен уметь из этой библиотеки генерировать
файлы .h и .c с описанием соответствующих COM-интерфейсов. Например, в Visual C++
для этого существует директива import:

The #import Directive
http://msdn.microsoft.com/en-us/libr...=vs.90%29.aspx

К вопросу о том, где искать библиотеку типов.
Вам нужно найти в реестре то место, где зарегистрирован COM-объект.
Искать можно в HKCR\AppID по friendly-имени компонента (типа SAPI.SpVoice) и в
HKCR\CLSID (по GUID-у, если он известен). В ключе HKCR\CLSID\<guid компонента>
должа быть ссылка на библиотеку типов, т.е. GUID. Этот GUID нужно искать в
HKCR\TypeLib, и вот там должен быть строковой параметр REG_SZ, в котором
будет указан путь к библиотеке типов. Она, кстати, может (и часто так и бывает)
"вшита" в файл с самим COM-объектом (dll или exe).

Ну а дальше подключаете .h и .c файлы к своему проекту и там вызываете
CoInitializeEx -> CoCreateInstance и далее работаете с методами объекта.

Добавлено через 10 минут
То есть, метод поиска примерно такой:

Код
HKCR\SomeCompany.SomeComponent\
    CLSID\
	(default value = {SomeGUID} ; Здесь находим GUID компонента.

HKCR\CLSID\{SomeGUID}\
    TypeLib\
	(default value = {LibGUID} ; Здесь находим GUID библиотеки типов.

HKCR\TypeLib\{LibGUID}\
    1.0\ ; (или другой номер версии)
        0\
            win32\
                (default value = путь к библиотеке типов).
Добавлю, что если компонент 32-битный, а Windows 64-битная, то
сведения о его регистрации нужно искать в WOW64-ключах.
То есть, не HKCR\CLSID, например, а HKCR\Wow6432Node\CLSID.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru