Home » Eclipse Projects » Standard Widget Toolkit (SWT) » Bug 72320: SWT Fails to load ActiveX control with error -2147467262
| |
Re: Bug 72320: SWT Fails to load ActiveX control with error -2147467262 [message #443462 is a reply to message #443367] |
Fri, 24 September 2004 19:57 |
Eclipse User |
|
|
|
Originally posted by: dwojtas.myrealbox.com
fan wrote:
> Hi,
>
> I just figured out that this is not a bug of the eclipse SWT. Actually it's
> that control itself(DSOFramerControl which can be found on MSDN) dosen't
> implement minimum required interfaces, in consequence it can't be
> instantiated by win32 API OleCreate.
>
> Older "OLE object" specifications require the implementation of IOleObject,
> IDataObject and IPersistStorage as the mimimal set of interfaces to qualify
> a blob as an OLE object. To workaround, you must implement the missing
> interface as what I did, and it works fine.
>
> Fan Yang
>
> OSTnet Inc.
Can you place somewhere your modified version?
Or send me by email?
Darek
|
|
| |
Re: Bug 72320: SWT Fails to load ActiveX control with error -2147467262 [message #444054 is a reply to message #443553] |
Tue, 05 October 2004 22:39 |
Fan Yang Messages: 2 Registered: July 2009 |
Junior Member |
|
|
Hi,
Sorry for late response because I'm working on another project and didn't
visit swt newsgroup for a while.
I have to say that I'm not a COM expert, so the solution maybe not perfect,
it's just for your reference. If you find errors or another good solution,
please let me know. thanks.
By the way, actually I rewrote the CDsoFramerControl(ActiveX control) by
using ATL and kept the CDsoDocObject(ActiveX document container), in that
way, I have integrate our system(COM based) with eclipse, and it works fine.
//Step 1. Add following code to dsoframer.h
// IPersistStorage
BEGIN_INTERFACE_PART(PersistStorage, IPersistStorage)
STDMETHODIMP GetClassID(CLSID *pClassID);
STDMETHODIMP IsDirty(void);
STDMETHODIMP Load(IStorage * pStg);
STDMETHODIMP Save(IStorage * pStgSave, BOOL fSameAsLoad);
STDMETHODIMP SaveCompleted(IStorage * pStgNew);
STDMETHODIMP HandsOffStorage(void);
STDMETHODIMP InitNew(IStorage* pStg);
END_INTERFACE_PART(PersistStorage)
//Step 2. add following code to dsofcontrol.cpp
//////////////////////////////////////////////////////////// ////////////
// CDsoFramerControl::XPersistStorage -- IPersistStorage Implementation
// STDMETHODIMP GetClassID(CLSID *pClassID);
// STDMETHODIMP IsDirty(void);
// STDMETHODIMP Load(IStorage * pStg);
// STDMETHODIMP Save(IStorage * pStgSave, BOOL fSameAsLoad);
// STDMETHODIMP SaveCompleted(IStorage * pStgNew);
// STDMETHODIMP HandsOffStorage(void);
// STDMETHODIMP InitNew(IStorage* pStg);
IMPLEMENT_INTERFACE_UNKNOWN(CDsoFramerControl, PersistStorage)
STDMETHODIMP CDsoFramerControl::XPersistStorage::GetClassID(CLSID *pClassID)
{
ODS("CDsoFramerControl::XPersistStorage::GetClassID\n");
if (pClassID) *pClassID = CLSID_FramerControl;
return S_OK;
}
STDMETHODIMP CDsoFramerControl::XPersistStorage::IsDirty(void)
{
METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
ODS("CDsoFramerControl::XPersistStorage::IsDirty\n");
return (pThis->m_fDirty) ? S_OK : S_FALSE;
}
STDMETHODIMP CDsoFramerControl::XPersistStorage::InitNew(IStorage* pStg)
{
METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
ODS("CDsoFramerControl::XPersistStorage::InitNew\n");
//return pThis->m_xPersistStreamInit.InitNew();
return S_OK;
}
STDMETHODIMP CDsoFramerControl::XPersistStorage::Save(IStorage * pStgSave,
BOOL fSameAsLoad)
{
METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
ODS("CDsoFramerControl::XPersistStorage::Save\n");
if (pStgSave == NULL)
return E_INVALIDARG;
HRESULT hr = E_FAIL;
LPSTREAM pIStream;
static LPCOLESTR vszContents = OLESTR("Contents");
hr = pStgSave->CreateStream(vszContents,
STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE,
0, 0, &pIStream);
if (SUCCEEDED(hr))
hr = pThis->m_xPersistStreamInit.Save(pIStream, fSameAsLoad);
pIStream->Release();
return hr;
}
STDMETHODIMP CDsoFramerControl::XPersistStorage::Load(IStorage * pStg)
{
METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
ODS("CDsoFramerControl::XPersistStorage::Load\n");
if (pStg == NULL)
return E_INVALIDARG;
HRESULT hr = E_FAIL;
LPSTREAM pIStream;
hr = pStg->OpenStream(OLESTR("Contents"), NULL,
STGM_DIRECT | STGM_SHARE_EXCLUSIVE, 0, &pIStream);
if (SUCCEEDED(hr))
hr = pThis->m_xPersistStreamInit.Load(pIStream);
pIStream->Release();
return hr;
}
STDMETHODIMP CDsoFramerControl::XPersistStorage::SaveCompleted(IStorage *
pStgNew)
{
METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
ODS("CDsoFramerControl::XPersistStorage::SaveCompleted\n");
return S_OK;
}
STDMETHODIMP CDsoFramerControl::XPersistStorage::HandsOffStorage(void)
{
METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
ODS("CDsoFramerControl::XPersistStorage::HandsOffStorage\n");
return S_OK;
}
//Step 3. modify XInternalUnknown::QueryInterface member function which
exists in dsofcontrol.cpp
// add following code before the line "else if (IID_IPersistPropertyBag ==
riid)"
else if (IID_IPersistStorage == riid)
{
*ppv = (IPersistStorage*)&(pThis->m_xPersistStorage);
}
|
|
|
Re: Bug 72320: SWT Fails to load ActiveX control with error -2147467262 [message #444147 is a reply to message #444054] |
Thu, 07 October 2004 18:32 |
Kenzo Messages: 13 Registered: July 2009 |
Junior Member |
|
|
Thanks for the code! Its really appreciated!
"fan" <fan@ostnet.com> wrote in message news:cjv72o$5ca$1@eclipse.org...
> Hi,
>
> Sorry for late response because I'm working on another project and didn't
> visit swt newsgroup for a while.
>
> I have to say that I'm not a COM expert, so the solution maybe not
perfect,
> it's just for your reference. If you find errors or another good solution,
> please let me know. thanks.
>
> By the way, actually I rewrote the CDsoFramerControl(ActiveX control) by
> using ATL and kept the CDsoDocObject(ActiveX document container), in that
> way, I have integrate our system(COM based) with eclipse, and it works
fine.
>
> //Step 1. Add following code to dsoframer.h
> // IPersistStorage
> BEGIN_INTERFACE_PART(PersistStorage, IPersistStorage)
> STDMETHODIMP GetClassID(CLSID *pClassID);
> STDMETHODIMP IsDirty(void);
> STDMETHODIMP Load(IStorage * pStg);
> STDMETHODIMP Save(IStorage * pStgSave, BOOL fSameAsLoad);
> STDMETHODIMP SaveCompleted(IStorage * pStgNew);
> STDMETHODIMP HandsOffStorage(void);
> STDMETHODIMP InitNew(IStorage* pStg);
> END_INTERFACE_PART(PersistStorage)
>
> //Step 2. add following code to dsofcontrol.cpp
> //////////////////////////////////////////////////////////// ////////////
> // CDsoFramerControl::XPersistStorage -- IPersistStorage Implementation
> // STDMETHODIMP GetClassID(CLSID *pClassID);
> // STDMETHODIMP IsDirty(void);
> // STDMETHODIMP Load(IStorage * pStg);
> // STDMETHODIMP Save(IStorage * pStgSave, BOOL fSameAsLoad);
> // STDMETHODIMP SaveCompleted(IStorage * pStgNew);
> // STDMETHODIMP HandsOffStorage(void);
> // STDMETHODIMP InitNew(IStorage* pStg);
> IMPLEMENT_INTERFACE_UNKNOWN(CDsoFramerControl, PersistStorage)
> STDMETHODIMP CDsoFramerControl::XPersistStorage::GetClassID(CLSID
*pClassID)
> {
> ODS("CDsoFramerControl::XPersistStorage::GetClassID\n");
> if (pClassID) *pClassID = CLSID_FramerControl;
> return S_OK;
> }
>
> STDMETHODIMP CDsoFramerControl::XPersistStorage::IsDirty(void)
> {
> METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
> ODS("CDsoFramerControl::XPersistStorage::IsDirty\n");
> return (pThis->m_fDirty) ? S_OK : S_FALSE;
> }
>
> STDMETHODIMP CDsoFramerControl::XPersistStorage::InitNew(IStorage* pStg)
> {
> METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
> ODS("CDsoFramerControl::XPersistStorage::InitNew\n");
> //return pThis->m_xPersistStreamInit.InitNew();
> return S_OK;
> }
>
> STDMETHODIMP CDsoFramerControl::XPersistStorage::Save(IStorage * pStgSave,
> BOOL fSameAsLoad)
> {
> METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
> ODS("CDsoFramerControl::XPersistStorage::Save\n");
> if (pStgSave == NULL)
> return E_INVALIDARG;
>
> HRESULT hr = E_FAIL;
> LPSTREAM pIStream;
> static LPCOLESTR vszContents = OLESTR("Contents");
> hr = pStgSave->CreateStream(vszContents,
> STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE,
> 0, 0, &pIStream);
> if (SUCCEEDED(hr))
> hr = pThis->m_xPersistStreamInit.Save(pIStream, fSameAsLoad);
>
> pIStream->Release();
> return hr;
> }
>
> STDMETHODIMP CDsoFramerControl::XPersistStorage::Load(IStorage * pStg)
> {
> METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
> ODS("CDsoFramerControl::XPersistStorage::Load\n");
> if (pStg == NULL)
> return E_INVALIDARG;
>
> HRESULT hr = E_FAIL;
>
> LPSTREAM pIStream;
> hr = pStg->OpenStream(OLESTR("Contents"), NULL,
> STGM_DIRECT | STGM_SHARE_EXCLUSIVE, 0, &pIStream);
> if (SUCCEEDED(hr))
> hr = pThis->m_xPersistStreamInit.Load(pIStream);
>
> pIStream->Release();
> return hr;
> }
>
> STDMETHODIMP CDsoFramerControl::XPersistStorage::SaveCompleted(IStorage *
> pStgNew)
> {
> METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
> ODS("CDsoFramerControl::XPersistStorage::SaveCompleted\n");
> return S_OK;
> }
>
> STDMETHODIMP CDsoFramerControl::XPersistStorage::HandsOffStorage(void)
> {
> METHOD_PROLOGUE(CDsoFramerControl, PersistStorage);
> ODS("CDsoFramerControl::XPersistStorage::HandsOffStorage\n");
> return S_OK;
> }
>
> //Step 3. modify XInternalUnknown::QueryInterface member function which
> exists in dsofcontrol.cpp
> // add following code before the line "else if (IID_IPersistPropertyBag ==
> riid)"
>
> else if (IID_IPersistStorage == riid)
> {
> *ppv = (IPersistStorage*)&(pThis->m_xPersistStorage);
> }
>
>
>
>
|
|
|
Goto Forum:
Current Time: Fri Apr 19 07:47:36 GMT 2024
Powered by FUDForum. Page generated in 0.02683 seconds
|