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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.