Сейчас на форуме: _MBK_, UniSoft, laslo, bartolomeo (+5 невидимых)

 eXeL@B —› Программирование —› VB(VBS) COM и MASM32
Посл.ответ Сообщение


Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 18 августа 2011 14:58
· Личное сообщение · #1

Вопрос знатокам. При кодинге на VB или VBS есть такая функция как CreateObject('имя класса') например Set objApp = CreateObject( "Shell.Application" ) Подскажите плз как можно на низком уровне реализовать такую функцию не зная GUID данного объекта (что бы не ворошить интернет в поисках GUID и не забивать его как константу), т.е. по имени, в данном примере - это Shell.Application, ну или же на худой конец по этому имени получить GUID для CoCreateInstance. Премного благодарен.



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 18 августа 2011 17:09 · Поправил: Av0id
· Личное сообщение · #2

пробежаться по HKEY_CLASSES_ROOT\CLSID\{....}\ProgID или так CLSIDFromProgID(OLESTR("Shell.Application"),&clsid)




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 19 августа 2011 13:40
· Личное сообщение · #3

А конкретно по строчному имени можно получить описатель объекта ? Или только через CoCreateInstance по CLSID ?



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 19 августа 2011 14:49
· Личное сообщение · #4

имхо только CoCreateInstance




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 19 августа 2011 16:00
· Личное сообщение · #5

Как-то так: HRESULT CLSIDFromProgID(LPCOLESTR lpszProgID, LPCLSID pclsid);

-----
Следуй за белым кроликом





Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 19 августа 2011 22:05
· Личное сообщение · #6

Спасибо все понятно стало. Еще один вопрос - Методы com-объектов в msdn указаны в алфавитном порядке, но когда возвращается описатель объекта, указатели на методы расположены не в алфавитном порядке, где можно посмотреть в каком порядке идут методы в объектах ком ?




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 19 августа 2011 22:20
· Личное сообщение · #7

Все интерфейсы COM наследуются от IUnknown. То есть в любой vtable первые три будут QueryInterface, AddRef и Release. Точно не помню как они идут, но это можно посмотреть в заголовочных файлах. Как они перечислины в объявлении интерфейса так и идут. За ними идут методы самого интерфейса, тоже в том порядке в каком описаны в библиотеке типов. Как-то так.

-----
Следуй за белым кроликом





Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 20 августа 2011 10:33
· Личное сообщение · #8

Если есть возможность выложите плз все заголовочные файлы с объявлениями (я так понял это си-файлы), что бы на будущее как справочник.



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 22 августа 2011 11:10
· Личное сообщение · #9

кроме IUnknown часто в купе используется IDispatch, заголовочные файлы есть в любом PSDK, 'goto IUnknown definition' и там увидишь что нужно, также очень помогает ole/com viewer, object browser в самой студии и typelib viewer.

Вот, может заинтересует
http://disphelper.sourceforge.net/




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 22 августа 2011 19:48
· Личное сообщение · #10

Видел в дизассемблерном дистинге как VB работает с COM. Ятак понял у него нет объявлений в каком порядке расположены методы объекта - позицию метода или свойства он определяет по имени, функцией __vbaVarLateMemCallLd и затем вызывает метод как следствие могу предположить что все-таки есть такая возможность определять позицию метода в описателе объекта по имени, дабы не использовать громоздких структур в исходниках и не искать по заголовочным файлам порядок расположения методов в объекте. Кто знает - поделитесь информацией.


 eXeL@B —› Программирование —› VB(VBS) COM и MASM32
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати