Здравствуйте, 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();
Что-то типа этого, вот только не знаю как ты собираешься его юзать и что там с маршалингом