AfxOleInit()第二回调用就报错

AfxOleInit()第二次调用就报错
我写了个封装对Excel操作的类,在类构造的时候是这样
CMyExcel::CMyExcel()
if (!AfxOleInit())
{
AfxMessageBox("初始化COM失败");
}

if (!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("无法启动excel");
}

app.SetVisible(FALSE);
app.SetUserControl(TRUE);

然后我在调用的时候,如果CMyExcel m_excel;声明为成员变量时,在自定义线程中调用操作Excel的函数时就出现异常报错
但是如果把CMyExcel m_excel;声明为局部变量时,就会每调用一次,上面的AfxOleInit())就会被调用一次,而第二次调用的时候就会报错
这两种情况都是怎么回事呢,怎么解决呢
------解决方案--------------------
static BOOL m_bOleInit;
CMyExcel::CMyExcel()
if(!m_bOleInit) m_bOleInit=AfxOleInit();

------解决方案--------------------
beOle 必须是 static 的, 表示 类变量, 与 实例 个数 无关。
CMyExcel m_excel;   一定要 放 堆栈 里? 
------解决方案--------------------
LPDISPATCH _Application::GetWorkbooks()
{
LPDISPATCH result;
InvokeHelper(0x23c, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);//这句报错
return result;
}
看看是什么错误。
------解决方案--------------------
AfxOleInit()只支持单线程,所以采用成员变量调用Excel会出现问题。多线程访问excel请采用      HRESULT CoInitializeEx( void * pvReserved,  DWORD dwCoInit);具体参见msdn