На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> COM на чистом C
    Нужна информация по использованию COM на чистом Си, не С++. Вобщем, суть в следующем. Т.к. я в технологии COM начинающий, просьба больно не бить. Имеется длл-ка, представляющая собой COM-объект (или как он там называется). Также имеется полное описание всех методов и атрибутов этой длл-ки. Мне нужно работать с ней на чистом Си, НЕ С++, т.е. работать через Win32 API. Я упорно повторяю НЕ С++, потому что уже в двух форумах мне присылают решения на С++, которые совершенно бесполезны в данной ситуации. Как это сделать? Если кто-нибудь поможет, буду очень благодарен.
      А idl или tlb файл к этой dll-ке есть? Обрабатываешь его midl'ом (midl.exe - входит в поставку студии). В сгенерированном h-файле будут как C++, так и С интерфейсы. Основному COM-овскому WinAPI побарабану какой указатель ему подсовывают, по этому спокойно объявляешь нужные тебе структуры, суешь указатели на них в API-функции и все должно работать.
      "Математики думают, что Бог в уравнениях, нейрологи уверены, что Бог в мозге, а программисты уверены, что Бог — один из них."
      Морган Фриман
      Мой учебник C++ - это просто!
      Я на blogspot.com.
          Тут
          В особенности обрати внемание на http://www.rs232.ru/doc002.html
          Жизнь это игра - задумка хреновая, но графика обалденная...
            bizar, в данном случае COM - это не COM-порт, а Component Object Model - методика взаимодействия программных компонентов. :)
            Во имя Ctrl, Alt и святаго Del, Enter!

            Основам программирования не обучаю. Не интересно.
              А можно ли из tlb как-нибудь получить заголовочный файл? Или это только из idl?
              И еще: как по ProgID вычислить CLSID?
                Возвращаясь к моему первому сообщению....
                Из той длл-ки я выдрал tlb-файл, как оказалось он был в ней в ресурсах. Как его распотрошить, чтобы получить idl? Или как-то можно по-другому вызывать методы?

                Еще вопрос по функции CoCreateInstance. Конкретно интересуют два параметра.
                1) REFCLSID rclsid - это как я понимаю CLSID объекта в целом.
                2) REFIID riid - идентификатор интерфейса (???).

                Так вот, CLSID объекта я получил через CLSIDFromProgId (ProgId известен). Но как получить идентификатор интерфейса? В MSDN ничего подходящего не нашел.

                З.Ы. Статью Ole for idiots прочитал, но там большей частью про то, как создавать COM-объекты (сервер), а не как с ними работать из клиента.
                  ну - можно через import, можно tlb-ку расковырять через OleView...
                  есть еще способы...
                    CLSID - это CLaSs ID объекта
                    IID - это Interface ID. Его надо знать, чтобы создать объект. А иначе получается, "дай мне то, не знаю что".

                    Про TLB можешь почитать тут.

                    Добавлено в :
                    и тут.
                    Среднестатистический житель Петербурга различает до двух с половиной тысяч оттенков серого
                    ლ(ಠ益ಠლ) ( ͡- ͜ʖ ͡-) ( ͡° ͜ʖ ͡°) (╯°□°)╯ ¯\_(ツ)_/¯༼ ຈل͜ຈ༽
                      Эта длл-ка вобще-то для 1С. И там с ней работают просто:

                      Перем = СоздатьОбъект("трам.тарам");
                      Перем.GetSomething();

                      Т.е. сама 1С как-то узнает Interface ID и CLSID. Хотя кроме длл-ки никаких файлов больше нет (ни tlb, ни чего-то еще). Я поэтому и спрашиваю, как это можно сделать.
                        А Дэйла Роджерсона, "Inside COM" ("Основы COM") читал? Если нет, тогда смотри здесь.
                          2 CheshireCat: классная книга, теперь многое понятно. Благодарю.
                            А чем вызванно такое мазохистское желание прогрпммировать обращение к COMпоненту на чистом C? Ведь использование "чистого" Windows API совсем не означает что нужно писать только на C. Что за компилятор ты хоть используеш?
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            [ Script Execution time: 0,1164 ]   [ 17 queries used ]   [ Generated: 11.12.16, 06:07 GMT ]