Передача OLE объекта в другое приложение
От: art_  
Дата: 22.12.05 11:38
Оценка:
Здравствуйте
Сразу хочу предупредить — в COM технологиях я разбираюсь очень плохо, поэтому заранее прошу прощения за возможные некорректности.

Передо мной стоит следующая задача:
Есть некоторое приложение (среда разработки), в которой возможно программирование на Visual Basic
Среда автоматически генерирует хуки, в которые я могу вписывать свой код, соответственно я этим сильно ограничен.
Как мне кажется, вся работа внутри данного хука происходит в рамках некоторого существующего OLE объекта.
То есть я могу вызывать его методы, которые задокументированы...
Мне хотелось бы:
1. убедиться. что это действительно так
2. получить референс на этот объект (AddRef не срабатывает)
3. Передать этот рефернс в другое приложение — возможно тоже реализованнное на Visual Basic но уже в среде Visual Studio и, соответственно тоже в виде OLE объекта

Буду очень признателен, за идей, которые могут поступить
Re: Передача OLE объекта в другое приложение
От: Аноним  
Дата: 22.12.05 16:00
Оценка:
Здравствуйте, art_, Вы писали:

_>Здравствуйте

_>Сразу хочу предупредить — в COM технологиях я разбираюсь очень плохо, поэтому заранее прошу прощения за возможные некорректности.

_>Передо мной стоит следующая задача:

_>Есть некоторое приложение (среда разработки), в которой возможно программирование на Visual Basic
_>Среда автоматически генерирует хуки, в которые я могу вписывать свой код, соответственно я этим сильно ограничен.
_>Как мне кажется, вся работа внутри данного хука происходит в рамках некоторого существующего OLE объекта.
_>То есть я могу вызывать его методы, которые задокументированы...
_>Мне хотелось бы:
_>1. убедиться. что это действительно так
_>2. получить референс на этот объект (AddRef не срабатывает)
_>3. Передать этот рефернс в другое приложение — возможно тоже реализованнное на Visual Basic но уже в среде Visual Studio и, соответственно тоже в виде OLE объекта

_>Буду очень признателен, за идей, которые могут поступить


Среда автоматически генерирует хуки??? Как это?
Re: Передача OLE объекта в другое приложение
От: Константин Ленин  
Дата: 22.12.05 16:09
Оценка:
Здравствуйте, art_, Вы писали:

_>Здравствуйте

_>Сразу хочу предупредить — в COM технологиях я разбираюсь очень плохо, поэтому заранее прошу прощения за возможные некорректности.

_>Передо мной стоит следующая задача:

_>Есть некоторое приложение (среда разработки), в которой возможно программирование на Visual Basic
_>Среда автоматически генерирует хуки, в которые я могу вписывать свой код, соответственно я этим сильно ограничен.
_>Как мне кажется, вся работа внутри данного хука происходит в рамках некоторого существующего OLE объекта.
_>То есть я могу вызывать его методы, которые задокументированы...
_>Мне хотелось бы:
_>1. убедиться. что это действительно так
_>2. получить референс на этот объект (AddRef не срабатывает)

Не совсем понятно, причем здесь( только ) AddRef и почему он не срабатывает?

_>3. Передать этот рефернс в другое приложение — возможно тоже реализованнное на Visual Basic но уже в среде Visual Studio и, соответственно тоже в виде OLE объекта


_>Буду очень признателен, за идей, которые могут поступить


Из этого хука ты можешь создавать какие-либо COM-объекты? Если да, то первое, что мне приходит в голову, это написание своего COM-объекта( скорее всего singleton'a, что-бы и объект, созданный в хуке, и в нужном приложении совпадали ), который бы принимал IUnknown( IDispatch? ) этого хука и отдавал его в нужное тебе приложение.
Re[2]: Передача OLE объекта в другое приложение
От: art_  
Дата: 22.12.05 20:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Среда автоматически генерирует хуки??? Как это?


В приложении жестко прошиты места, в которые можно вставить свой код. Это изначально пустые функции VB, содержимое которых я могу реализовать сам. А вот какие это функции, кто их вызывает и когда — решает система. Я этого не вижу и не могу изменить.
Мне хочется каким нибудь образом выцепить OLE объект, который как мне кажется существует в этот момент и передать его во вне данного приложения, и таким образом получить большую гибкость.
Re[2]: Передача OLE объекта в другое приложение
От: art_  
Дата: 22.12.05 20:23
Оценка:
Здравствуйте, Константин Ленин, Вы писали:

КЛ>Не совсем понятно, причем здесь( только ) AddRef и почему он не срабатывает?

Мне тоже, я предупреждал что в технологиях VB и COM разбираюсь слабо — было предположение, что при помощи AddRef получиться создать дубль объекта....

_>>3. Передать этот рефернс в другое приложение — возможно тоже реализованнное на Visual Basic но уже в среде Visual Studio и, соответственно тоже в виде OLE объекта


_>>Буду очень признателен, за идей, которые могут поступить


КЛ>Из этого хука ты можешь создавать какие-либо COM-объекты? Если да, то первое, что мне приходит в голову, это написание своего COM-объекта( скорее всего singleton'a, что-бы и объект, созданный в хуке, и в нужном приложении совпадали ), который бы принимал IUnknown( IDispatch? ) этого хука и отдавал его в нужное тебе приложение.

Не мог бы ты привести пример того как это сделать на ВБ? Меня интересует именно момент передачи себя
Если привести аналогию из С++, там можно сделать примерно следующее
MyOwnClass *my = new MyOwnClass( this )

Вот момент с this — мне наиболее непонятен ...
Re: Передача OLE объекта в другое приложение
От: bnk СССР http://unmanagedvisio.com/
Дата: 23.12.05 06:12
Оценка:
Здравствуйте, art_, Вы писали:

_>Есть некоторое приложение (среда разработки), в которой возможно программирование на Visual Basic

_>Среда автоматически генерирует хуки, в которые я могу вписывать свой код, соответственно я этим сильно ограничен.

Это скорее всего не хуки (хуки это нечто совсем другое), а обработчики событий..
Что за среда-то?

_>Как мне кажется, вся работа внутри данного хука происходит в рамках некоторого существующего OLE объекта.

_>То есть я могу вызывать его методы, которые задокументированы...

Как выглядит использование (вызовы) этого OLE объекта (маленький кусок кода) ?

_>Мне хотелось бы:

_>2. получить референс на этот объект (AddRef не срабатывает)

Мы же вроде про VB говорим? Какокй AddRef?

_>3. Передать этот рефернс в другое приложение — возможно тоже реализованнное на Visual Basic но уже в среде Visual Studio и, соответственно тоже в виде OLE объекта


А среда этого не предусматривает?
Т.е. может быть можно сделать это вполне легально, как например, GetObject("Excel.Application") ?
Re[3]: Передача OLE объекта в другое приложение
От: Константин Ленин  
Дата: 23.12.05 14:21
Оценка:
Здравствуйте, art_, Вы писали:

_>Здравствуйте, Константин Ленин, Вы писали:


КЛ>>Не совсем понятно, причем здесь( только ) AddRef и почему он не срабатывает?

_>Мне тоже, я предупреждал что в технологиях VB и COM разбираюсь слабо — было предположение, что при помощи AddRef получиться создать дубль объекта....

_>>>3. Передать этот рефернс в другое приложение — возможно тоже реализованнное на Visual Basic но уже в среде Visual Studio и, соответственно тоже в виде OLE объекта


_>>>Буду очень признателен, за идей, которые могут поступить


КЛ>>Из этого хука ты можешь создавать какие-либо COM-объекты? Если да, то первое, что мне приходит в голову, это написание своего COM-объекта( скорее всего singleton'a, что-бы и объект, созданный в хуке, и в нужном приложении совпадали ), который бы принимал IUnknown( IDispatch? ) этого хука и отдавал его в нужное тебе приложение.

_>Не мог бы ты привести пример того как это сделать на ВБ? Меня интересует именно момент передачи себя
_>Если привести аналогию из С++, там можно сделать примерно следующее
_>MyOwnClass *my = new MyOwnClass( this )

_>Вот момент с this — мне наиболее непонятен ...


Я vb не знаю.



//.idl

interface ISomeObjectHolder : IDispatch
{
     HRESULT SetObject( [in] IUnknown* );
     HRESULT GetObject( [out] IUnknown* );     
}

//.h

class ATL_NO_VTABLE CSomeObjectHolder : 
    public CComObjectRootEx<CComMultiThreadModel>,
    public CComCoClass<CSomeObjectHolder, &CLSID_SomeObjectHolder>,
        ....
{
public:
    CSomeObjectHolder(){}

DECLARE_REGISTRY_RESOURCEID(IDR_BITSUPLOADMANAGER)

// Singleton object
DECLARE_CLASSFACTORY_SINGLETON(CBITSUploadManager)
....

private:

   IUnknownPtr m_pObject;


В твоем хэндлере( хуке )


ISomeObjectHolderPtr pHolder(CLSID_SomeObjectHolder);
pHolder->SetObject( this/*???*/ );



В студии



ISomeObjectHolderPtr pHolder(CLSID_SomeObjectHolder);
IUnknownPtr = pHolder->GetObject();


Что-то типа этого, вот только не знаю как ты собираешься его юзать и что там с маршалингом
Re[4]: Передача OLE объекта в другое приложение
От: Константин Ленин  
Дата: 23.12.05 14:22
Оценка:
Здравствуйте, Константин Ленин, Вы писали:

КЛ>Здравствуйте, art_, Вы писали:


_>>Здравствуйте, Константин Ленин, Вы писали:


КЛ>>>Не совсем понятно, причем здесь( только ) AddRef и почему он не срабатывает?

_>>Мне тоже, я предупреждал что в технологиях VB и COM разбираюсь слабо — было предположение, что при помощи AddRef получиться создать дубль объекта....

_>>>>3. Передать этот рефернс в другое приложение — возможно тоже реализованнное на Visual Basic но уже в среде Visual Studio и, соответственно тоже в виде OLE объекта


_>>>>Буду очень признателен, за идей, которые могут поступить


КЛ>>>Из этого хука ты можешь создавать какие-либо COM-объекты? Если да, то первое, что мне приходит в голову, это написание своего COM-объекта( скорее всего singleton'a, что-бы и объект, созданный в хуке, и в нужном приложении совпадали ), который бы принимал IUnknown( IDispatch? ) этого хука и отдавал его в нужное тебе приложение.

_>>Не мог бы ты привести пример того как это сделать на ВБ? Меня интересует именно момент передачи себя
_>>Если привести аналогию из С++, там можно сделать примерно следующее
_>>MyOwnClass *my = new MyOwnClass( this )

_>>Вот момент с this — мне наиболее непонятен ...


КЛ>Я vb не знаю.



КЛ>

КЛ>//.idl

КЛ>interface ISomeObjectHolder : IDispatch
КЛ>{
КЛ>     HRESULT SetObject( [in] IUnknown* );
КЛ>     HRESULT GetObject( [out] IUnknown* );     
КЛ>}

КЛ>//.h

КЛ>class ATL_NO_VTABLE CSomeObjectHolder : 
КЛ>    public CComObjectRootEx<CComMultiThreadModel>,
КЛ>    public CComCoClass<CSomeObjectHolder, &CLSID_SomeObjectHolder>,
КЛ>        ....
КЛ>{
КЛ>public:
КЛ>    CSomeObjectHolder(){}

КЛ>DECLARE_REGISTRY_RESOURCEID(IDR_BITSUPLOADMANAGER)

КЛ>// Singleton object
КЛ>DECLARE_CLASSFACTORY_SINGLETON(CBITSUploadManager)
КЛ>....

КЛ>private:

КЛ>   IUnknownPtr m_pObject;

КЛ>


КЛ>В твоем хэндлере( хуке )


КЛ>

КЛ>ISomeObjectHolderPtr pHolder(CLSID_SomeObjectHolder);
КЛ>pHolder->SetObject( this/*???*/ );

КЛ>



КЛ>В студии



КЛ>

КЛ>ISomeObjectHolderPtr pHolder(CLSID_SomeObjectHolder);
КЛ>IUnknownPtr = pHolder->GetObject();

КЛ>


КЛ>Что-то типа этого, вот только не знаю как ты собираешься его юзать и что там с маршалингом


Еще есть такое понятие как ROT
Re[4]: Передача OLE объекта в другое приложение
От: Константин Ленин  
Дата: 23.12.05 15:11
Оценка:
То, что я написал в предыдущем посту, лажа, тк нужно передавть указатель между процессами
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.