На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: Qraizer
  
> COM на чистом C
    Нужна информация по использованию COM на чистом Си, не С++. Вобщем, суть в следующем. Т.к. я в технологии COM начинающий, просьба больно не бить. Имеется длл-ка, представляющая собой COM-объект (или как он там называется). Также имеется полное описание всех методов и атрибутов этой длл-ки. Мне нужно работать с ней на чистом Си, НЕ С++, т.е. работать через Win32 API. Я упорно повторяю НЕ С++, потому что уже в двух форумах мне присылают решения на С++, которые совершенно бесполезны в данной ситуации. Как это сделать? Если кто-нибудь поможет, буду очень благодарен.
      А idl или tlb файл к этой dll-ке есть? Обрабатываешь его midl'ом (midl.exe - входит в поставку студии). В сгенерированном h-файле будут как C++, так и С интерфейсы. Основному COM-овскому WinAPI побарабану какой указатель ему подсовывают, по этому спокойно объявляешь нужные тебе структуры, суешь указатели на них в API-функции и все должно работать.
      "Математики думают, что Бог в уравнениях, нейрологи уверены, что Бог в мозге, а программисты уверены, что Бог — один из них."
      Морган Фриман
      Я на 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,1175 ]   [ 17 queries used ]   [ Generated: 25.05.16, 09:01 GMT ]  
                            Rambler's Top100