OLE question
Joao Vargem -- jpv.loyaltech@taguspark.pt
Tuesday, March 25, 1997
Environment: Windows 95, Visual C++ 4.1
This one is completly out of my league. Can anyone explain-me whats
happening?
In an attempt to improve the performance of my application, I decided
to create a User Interface Thread, wich created a dialog to be processed
by that thread. Freing the application while the dialog calculations e
screen updates where made. It all seemed to go smothly until I ran the
program (what a surprise hum?). I create the dialog using
CreateIndirect. In the program main thread, I've had no problems, inside
the Interface thread I get the following errors ( the applications
doesn't crash):
CoCreateInstance of OLE control {48932A4F-981F-101B-A7FB-4A79242FD97B}
failed.
>>> Result code: 0x800401f0
>>> Is the control is properly registered?
Warning: CreateDlgControls failed during dialog init.
Warning: Dialog creation failed!
I'm using a OCX in the dialog, as I said previously in the main process
I've never had any problems. This errors are generated from within the
function ::CreateDialogIndirect.
I really don't know much about OLE and all the help I could find
doesn't explain anything close enough for me to understand whats
happening. If anyone has an ideia I can't wait to read it. TIA
--
Joao Vargem (jpv.loyaltech@taguspark.pt)
LoyalTech Portugal SA
Oeiras, Portugal
Mike Blaszczak -- mikeblas@nwlink.com
Wednesday, March 26, 1997
[Mini-digest: 8 responses]
At 10:34 3/25/97 -0800, Joao Vargem wrote:
>Environment: Windows 95, Visual C++ 4.1
> In an attempt to improve the performance of my application, I decided
>to create a User Interface Thread, wich created a dialog to be processed
>by that thread.
> [...]
> >>> Result code: 0x800401f0
> I really don't know much about OLE and all the help I could find
>doesn't explain anything close enough for me to understand whats
>happening. If anyone has an ideia I can't wait to read it. TIA
The error code 0x800401F0 means "CoInitialize has not been called." That is,
you've started a new thread and not called CoInitialze() on that thread.
OLE has never heard of your thread before, and is not prepared to work
with it. If you call CoInitialize() in your subordinate thread as it
starts up, I think you'll enjoy much better results.
.B ekiM
http://www.nwlink.com/~mikeblas/
These words are my own. I do not speak on behalf of Microsoft.
One is too many and a million is not enough.
-----From: "Folbrecht, Paul B"
You have to initialize COM in every thread that uses it. Call
AfxOleInit().
______________________________ Reply Separator ____________________________
_____
Subject: OLE question
Author: jpv.loyaltech@taguspark.pt at JOHNSON_CONTROLS
Date: 3/25/97 10:34 AM
Environment: Windows 95, Visual C++ 4.1
This one is completly out of my league. Can anyone explain-me whats
happening? In an attempt to improve the performance of my application, I
decided
to create a User Interface Thread, wich created a dialog to be processed
by that thread. Freing the application while the dialog calculations e
screen
updates where made. It all seemed to go smothly until I ran the
program (what a surprise hum?). I create the dialog using
CreateIndirect. In the program main thread, I've had no problems, inside
the Interface thread I get the following errors ( the applications
doesn't crash):
CoCreateInstance of OLE control {48932A4F-981F-101B-A7FB-4A79242FD97B}
failed.
>>> Result code: 0x800401f0
>>> Is the control is properly registered?
Warning: CreateDlgControls failed during dialog init.
Warning: Dialog creation failed!
I'm using a OCX in the dialog, as I said previously in the main process
I've never had any problems. This errors are generated from within the
function ::CreateDialogIndirect.
I really don't know much about OLE and all the help I could find
doesn't explain anything close enough for me to understand whats
happening. If anyone has an ideia I can't wait to read it. TIA
--
Joao Vargem (jpv.loyaltech@taguspark.pt)
LoyalTech Portugal SA
Oeiras, Portugal
-----From: mzinner@berlin.snafu.de
you have to call AfxEnableControlContainer() in your
new thread to enable MFC to use the control in your dialog.
For your main thread, this was done in InitInstance() because
you checked 'Enable Ocx Control support' in appwizard, but
you have to do it again for this other thread.
HTH,
-manfred
-----From: Stephane Larocque
Did you call OleInitialize(NULL) before CoCreateInstance(...) ?
steph.
-----From: "Doug Brubacher"
I've seen it mentioned here several times that OLE needs to be
initialized by each thread in your application that requires it (OLE).
Try adding AfxEnableControlContainer() or OleInitialize() in your
interface thread.
Regards,
Doug Brubacher
Doug_Brubacher@compuware.com
-----From: Mario Contestabile
>CreateIndirect. In the program main thread, I've had no problems, inside
>the Interface thread I get the following errors ( the applications
>doesn't crash):
>
> CoCreateInstance of OLE control {48932A4F-981F-101B-A7FB-4A79242FD97B}
>failed.
> >>> Result code: 0x800401f0
> >>> Is the control is properly registered?
> Warning: CreateDlgControls failed during dialog init.
> Warning: Dialog creation failed!
AfxOleInit() should be called for every thread.
Mario Contestabile
mcontest@universal.com
-----From: hou@tfn.com (Bing Hou)
The error code 0x800401f0 is defined by OLE as CO_E_NOTINITIALIZED, that
indicates that your UI thread does not initialize ole, it could certainly
help.
Bing Hou
hou@tfn.com
------------------------------------------------------------------------
"Always take a job that is too big for you."
______________________________ Reply Separator _________________________________
Subject: OLE question
Author: Joao Vargem at Internet
Date: 3/25/97 10:34 AM
Environment: Windows 95, Visual C++ 4.1
This one is completly out of my league. Can anyone explain-me whats
happening?
In an attempt to improve the performance of my application, I decided
to create a User Interface Thread, wich created a dialog to be processed
by that thread. Freing the application while the dialog calculations e
screen updates where made. It all seemed to go smothly until I ran the
program (what a surprise hum?). I create the dialog using
CreateIndirect. In the program main thread, I've had no problems, inside
the Interface thread I get the following errors ( the applications
doesn't crash):
CoCreateInstance of OLE control {48932A4F-981F-101B-A7FB-4A79242FD97B}
failed.
>>> Result code: 0x800401f0
>>> Is the control is properly registered?
Warning: CreateDlgControls failed during dialog init.
Warning: Dialog creation failed!
I'm using a OCX in the dialog, as I said previously in the main process
I've never had any problems. This errors are generated from within the
function ::CreateDialogIndirect.
I really don't know much about OLE and all the help I could find
doesn't explain anything close enough for me to understand whats
happening. If anyone has an ideia I can't wait to read it. TIA
--
Joao Vargem (jpv.loyaltech@taguspark.pt)
LoyalTech Portugal SA
Oeiras, Portugal
-----From: David Razzetti
On Tue, 25 Mar 1997 10:34:51 -0800, you wrote:
Did you remember to initialise the OLE DLLs (CoInitiaize) at the start
of your worker thread ?
>Environment: Windows 95, Visual C++ 4.1
>
> This one is completly out of my league. Can anyone explain-me whats
>happening?
> In an attempt to improve the performance of my application, I decided
>to create a User Interface Thread, wich created a dialog to be processed
>by that thread. Freing the application while the dialog calculations e
>screen updates where made. It all seemed to go smothly until I ran the
>program (what a surprise hum?). I create the dialog using
>CreateIndirect. In the program main thread, I've had no problems, inside
>the Interface thread I get the following errors ( the applications
>doesn't crash):
>
> CoCreateInstance of OLE control {48932A4F-981F-101B-A7FB-4A79242FD97B}
>failed.
> >>> Result code: 0x800401f0
> >>> Is the control is properly registered?
> Warning: CreateDlgControls failed during dialog init.
> Warning: Dialog creation failed!
>
> I'm using a OCX in the dialog, as I said previously in the main process
>I've never had any problems. This errors are generated from within the
>function ::CreateDialogIndirect.
> I really don't know much about OLE and all the help I could find
>doesn't explain anything close enough for me to understand whats
>happening. If anyone has an ideia I can't wait to read it. TIA
>
>--=20
> Joao Vargem (jpv.loyaltech@taguspark.pt)
> LoyalTech Portugal SA
> Oeiras, Portugal
Joao Vargem -- jpv.loyaltech@taguspark.pt
Monday, March 31, 1997
Mario Contestabile wrote:
>
> AfxOleInit() should be called for every thread.
>
I can't. It makes sense but the function ASSERTS the second time it's
called:
BOOL AFXAPI AfxOleInit()
{
_AFX_OLE_STATE* pOleState = _afxOleState;
ASSERT(!pOleState->m_bNeedTerm); // calling it twice? <- the
functions ASSERTS here,
can it be an implementation flaw?
(...)
// termination required when OleInitialize does not fail
pOleState->m_bNeedTerm = TRUE;
(...)
}
However, calling OleInit, the error I mensioned disapears and starts
happening another:
InitNew or Load on OLE control
{48932A4F-981F-101B-A7FB-4A79242FD97B} failed.
>>> Result code: 0x8000ffff
Warning: CreateDlgControls failed during dialog init.
Warning: Dialog creation failed!
I managed to find that 0x8000ffff == E_UNEXPECTED. But unexpected
doesn't help-me much.
Thanks for all the answers.
--
Joao Vargem (jpv.loyaltech@taguspark.pt)
LoyalTech Portugal SA
Oeiras, Portugal
Kenneth A. Argo -- argo@rias.COM
Tuesday, April 01, 1997
You can call this:
// Initialize OLE libraries, needs to be executed in each thread using OLE
if (FAILED(::OleInitialize(NULL)))
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FAILED;
}
Ken
-----Original Message-----
From: Joao Vargem [SMTP:jpv.loyaltech@taguspark.pt]
Sent: Monday, March 31, 1997 8:51 PM
To: MFC Mailing List
Subject: Re: OLE question
Mario Contestabile wrote:
>
> AfxOleInit() should be called for every thread.
>
I can't. It makes sense but the function ASSERTS the second time it's
called:
BOOL AFXAPI AfxOleInit()
{
_AFX_OLE_STATE* pOleState = _afxOleState;
ASSERT(!pOleState->m_bNeedTerm); // calling it twice? <- the
functions ASSERTS here,
can it be an implementation flaw?
(...)
// termination required when OleInitialize does not fail
pOleState->m_bNeedTerm = TRUE;
(...)
}
However, calling OleInit, the error I mensioned disapears and starts
happening another:
InitNew or Load on OLE control
{48932A4F-981F-101B-A7FB-4A79242FD97B} failed.
>>> Result code: 0x8000ffff
Warning: CreateDlgControls failed during dialog init.
Warning: Dialog creation failed!
I managed to find that 0x8000ffff == E_UNEXPECTED. But unexpected
doesn't help-me much.
Thanks for all the answers.
--
Joao Vargem (jpv.loyaltech@taguspark.pt)
LoyalTech Portugal SA
Oeiras, Portugal
Become an MFC-L member
| Вернуться в корень Архива
|