EbGetExecutingProj - кто-нибудь сталкивался?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 25.05.2009 (Пн) 9:22

Как её использовать? Ссылку на какой именно объект она даёт?
Артур
 
   

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение alibek » 25.05.2009 (Пн) 9:44

Никак. Эти функции не для использования программистами.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Andrey Fedorov » 25.05.2009 (Пн) 11:05

alibek писал(а):Никак. Эти функции не для использования программистами.


Ну почему не для использования? Используют...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение alibek » 25.05.2009 (Пн) 11:19

Ну разве что в VBA.
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Хакер » 25.05.2009 (Пн) 11:21

Andrey Fedorov писал(а):Используют...

В чём смысл самодельного неполноценного аналога AddressOf?

Ссылку на какой именно объект она даёт?

Указатель на экземпляр соотв. сишного класса. И класс не COM-ный. И связывание статическое, раннее, пожалуй. Понимаешь, о чём я?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 25.05.2009 (Пн) 11:24

Я понимаю, что её нельзя использовать в скомпилированном экзешнике. Но ведь можно как-то в проекте?

Мне нужно из внешней библиотеки ActiveX, подключенной к проекту, получить ссылку на этот проект. Какой-то объект я даже получаю, но не понятно, какой :)
В библиотеке такой код:
Код: Выделить всё
Option Explicit
Private Declare Function GetCurrentVbaProject Lib "vba6.dll" Alias "EbGetExecutingProj" (hProject As Any) As Long

Private Sub Class_Initialize()
   Dim ln As Long

   Dim obj As Object
   ln = GetCurrentVbaProject(obj)
   MsgBox ObjPtr(obj) & " " & ln

   Dim vbPr As VBProject
   ln = GetCurrentVbaProject(vbPr)
   MsgBox ObjPtr(vbPr) & " " & ln
'оба варианта срабатывают и циферки совпадают - какой-то объект я таки получил

   MsgBox vbPr.FileName 'но не этот :( На этой строке бейсик дохнет
End Sub

Артур
 
   

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение alibek » 25.05.2009 (Пн) 11:25

Хакер писал(а):В чём смысл самодельного неполноценного аналога AddressOf?

В том, что AddressOf отсутствует.
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Хакер » 25.05.2009 (Пн) 11:26

Ещё раз. С чего ты взял, что Project Object это COM-объект?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Хакер » 25.05.2009 (Пн) 11:27

В том, что AddressOf отсутствует.

В VB5?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 25.05.2009 (Пн) 11:29

Хакер писал(а):И класс не COM-ный

На сколько я понял, проблема в этом? Но может через этот некомный класс можно как-то добраться до комного класса проекта?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Хакер » 25.05.2009 (Пн) 11:31

Как-нибудь можно наверняка. Но, не зная, что там, никто не скажет, как.

Кстати, я советую проверить, вдруг он всё-таки комный.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 25.05.2009 (Пн) 11:38

А как проверить? Ведь в переменную, объявленную как object, что-то загружается :) Или это ни о чем не говорит?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Хакер » 25.05.2009 (Пн) 11:47

Ни о чём не говорит.

Проверить можно двумя способами:
1) Если возвращается указатель на интерфейс, значит первым dword-ом по этому указателю будет лежать адрес vtable. В vtable три первых dword-а, если это COM-объект, должны быть указателями на QueryInterace, AddRef, Release. Собственно, в отладчике надо посмотреть, на какой код указывают эти три указателя. Вдуматься в смысл кода. Даже у очень разных классов реализация IUnknown будет «очень одинаковой». Если что-то из описанного не соблюдается (например если там, где предполагаемо находится vtable, находятся числа, не похожие (например отрицательные) на указатели на код), это не COM.

2) Объявить не как x As Any, а как ByRef pUnk As IUnknown.
В спецификации написано, что «QueryInterface must be reflexive». Это значит, что если через IUnknown::QueryInterface запросить IUnknown, то должна возвратиться та же самая интерфейсная ссылка. Если что-то не так (а в этом случае, скорее всего, будет крах), то это не COM-объект.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 25.05.2009 (Пн) 11:52

Объявил As IUnknown :) Загрузился!!!
Код: Выделить всё
Option Explicit
Private Declare Function GetCurrentVbaProject Lib "vba6.dll" Alias "EbGetExecutingProj" (hProject As IUnknown) As Long
Private Sub Class_Initialize()
    Dim ln As Long
    Dim obj As IUnknown

    ln = GetCurrentVbaProject(obj)
    MsgBox ObjPtr(obj) & " " & ln

End Sub

Куда теперь дальше копать?
Последний раз редактировалось arthur2 25.05.2009 (Пн) 11:56, всего редактировалось 2 раз(а).
Артур
 
   

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Andrey Fedorov » 25.05.2009 (Пн) 11:53

Хакер писал(а):
В том, что AddressOf отсутствует.

В VB5?


В VBA.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Хакер » 26.05.2009 (Вт) 20:21

Продолжим?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 26.05.2009 (Вт) 20:31

В смысле - вернёмся в эту тему? Давай :)
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Хакер » 26.05.2009 (Вт) 20:38

Проверил сам. Это COM-объект. Так что тебе повезло, а я ошибся.

ADDED:
И он не поддерживает IDispatch. Так что поработать с ним через ссылку, объяленную As Object никак не получится.

И интерфейс VBProject он тоже не поддерживает.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 26.05.2009 (Вт) 20:53

Хакер писал(а):Так что тебе повезло
Хакер писал(а):Так что поработать с ним через ссылку, объяленную As Object никак не получится.

В чём же тогда повезло? И как им тогда вообще попользоваться?

А можно через него как-то добраться-таки до объекта-проекта, с которым можно было бы работать привычным способом?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Хакер » 26.05.2009 (Вт) 21:00

В чём же тогда повезло?

Потому что могло оказаться, что это это не COM-объект. А обычный сишный класс. И связывание по-сишнему раннее. И методы — cdecl-ные. Вот тогда бы тебе не повезло.

Да и когда я это писал, я ещё не знал о том, поддерживает ли он IDispatch и VBProject. Так что была какая-то надежда. Если бы это был не COM-объект, подобных надежд бы не было.

Кстати, ITypeInfo тоже не поддерживается, так что вторую тему можно смело закрывать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 26.05.2009 (Вт) 21:16

так что вторую тему можно смело закрывать.
А эту тему - тоже? Я так понимаю - безнадёга? Ну хоть что-то хоть как-то можно от этого объекта получить? А то даже обидно :)
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Хакер » 26.05.2009 (Вт) 21:22

Сволочизм. OllyDbg виснет при попытке поотлаживать VBIDE. Пришлось действовать вручную.

Посмотрел в vtable адрес QueryInterface, перечислил базы загруженных модулей. Вобщем, реализация метода IUnknown::QueryInterface так же находится в vba6.dll по смещению 0xF785.
Дизассмнул, посмотрел на код.

Вобщем, этот объект поддерживает всего лишь два интерфейса:
  • {00000000-0000-0000-C000-000000000046} (это IUnknown)
  • {FD040200-0000-0000-C000-000000000046} (это хз что, надо искать)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 26.05.2009 (Вт) 21:58

Ну, в реестре нет (чего и следовало ожидать)

В общем, кажется, я сдаюсь :)
Мы забрались в такие дебри, что даже если ты чего и откопаешь, я вряд ли пойму, как этим воспользоваться :oops:

Но в любом случае - Спасибо!
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Хакер » 26.05.2009 (Вт) 22:17

Можно поизучать vtable этого X-интерфейса, посмотреть на код методов, отловить их вызов, посмотреть сколько и чего передаётся в качестве аргументов. Обратный инжиниринг то есть.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 26.05.2009 (Вт) 22:40

Изначально я думал, что это какой-то из объектов типа VBProject. А с этим Х-интерфейсом всё равно не понятно, что можно делать :( Да и изучать на таком уровне я всё равно не умею
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение Хакер » 27.05.2009 (Ср) 2:45

Вот нет в тебе хакерской натуры :) Поковырял бы, может быть, добрался бы до чего-нибудь интересного.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 27.05.2009 (Ср) 8:53

Да может и есть... Знал бы ты, как я минут, наверное, тридцать "отлаживал" ИДЕ с помощью WinDbg :) Ну, то есть пошагово чего-то там наблюдал и пытался хоть что-то понять. Очень сложно делать что-то, абсолютно не понимая, что именно делаешь... Хотя иногда у меня это даже получается 8)
Артур
 
   

__Sergey__
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 19.12.2008 (Пт) 12:46

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение __Sergey__ » 25.06.2009 (Чт) 12:08

Вот мое, маленькое исследование. Два тлб в архиве и еще надо прикрутить olelib.tlb Edanmo`s OLE Interfaces & functions v 1.81
Вложения
vbvm.rar
(20.58 Кб) Скачиваний: 312

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: EbGetExecutingProj - кто-нибудь сталкивался?

Сообщение arthur2 » 25.06.2009 (Чт) 13:33

__Sergey__ Здорово! Сижу разбираюсь... :)

Слушай, раз уж ты vba6.dll исследовал, может вот здесь что-нибудь подскажешь? viewtopic.php?f=51&t=39461&start=0&st=0&sk=t&sd=a
Артур
 
   


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

    TopList