在工作者线程中操作Excel要初始化OLE
来源:互联网 发布:如何在淘宝上买烟 编辑:程序博客网 时间:2024/06/05 06:34
线程中通过Ole调用Excel出现错误
不用线程的情况下正常工作,由于操作比较大的excel要比较长时间,所以放在线程中工作,没想到运行时出现错误,
跳出 dbgheap.c 第268行
pvBlk = _heap_alloc_dbg(nSize, nBlockUse, szFileName, nLine);
请问这是什么情况?
------解决方案--------------------
我也弄这个 期待答案 愁死我了
------解决方案--------------------
在线程中重新ole初始化试试
------解决方案--------------------
楼主你应该贴前面几个堆栈的代码,好分析点。
你先试下把所有与excel相关的代码都放在这个线程里,并保证只开了一个线程。
------解决方案--------------------
要在线程中做初始化
//////////////////////////////////////////////////////////
[求助] 请教高手:VC 在多线程中调用Exce问题
{
CDlgYield* pDlg = (CDlgYield*) pParam;
CReadExcel m_cReadExcel;
m_cReadExcel.SetOperator(pDlg->m_pXlOper); // m_pXlOper内含有Excel对象
// 读取文件
m_cReadExcel.Processing (pDlg->m_cOper);
// pDlg->m_cOper.Close(); // 关闭数据库
//
CWnd* pWnd_OK = pDlg->GetDlgItem(IDOK);
CWnd* pWnd_CANCEL = pDlg->GetDlgItem(IDCANCEL);
pWnd_OK->EnableWindow (TRUE);
pWnd_CANCEL->EnableWindow (TRUE);
return 0;
}
void CDlgYield::OnBnClickedOk()
{
// 方法1:多线程方式
//
#ifdef USE_MULTHREAD
pThread = AfxBeginThread((AFX_THREADPROC)CDlgYield::StartThread, this);
#else
// 方法2:直接在函数中处理
m_cReadExcel.SetOperator(m_pXlOper);
// 读取文件
m_cReadExcel.Processing (m_cOper);
// m_cOper.Close(); // 关闭数据库 关闭数据库 ---- 不能使用,否则不支持连续操作
//
pWnd_OK->EnableWindow (TRUE);
pWnd_CANCEL->EnableWindow (TRUE);
#endif
}
问题:
方法1、通过多线程调用 ---- Excel出现异常,读写Excel出现问题
方法2、不通过多线程调用 ---- Excel正常,读写都没有问题
测试的现象:5台计算机有3台在多线程方式下不能用。
请问,在多线程机制下,怎么调用Excel对象?在线程中 ::CoInitialize(NULL);也不行
2) pDlg->m_pXlOper,即线程使用m_pXl内Excel对象,必须遵守COM/COM+规范,简单说,对象接口指针必须遵守一个规范:计数增一,退出时计数减一
3)多线程共享接口指针,还有很多要注意的地方,比如套间等,不能象C/C++程序自己设计的对象指针那么简单对待
后来在别的网站上查询到:
在线程里采用多线程方式初始化COM,就OK了。
HRESULT hr = ::CoInitializeEx( NULL, COINIT_MULTITHREADED );
在线程里采用多线程方式初始化COM,就OK了。
HRESULT hr = ::CoInitializeEx( NULL, COINIT_MULTITHREADED );
0 0
- 在工作者线程中操作Excel要初始化OLE
- Delphi中使用OLE方法操作Excel
- Delphi中通过OLE来操作Excel
- 用OLE操作Excel
- OLE操作EXCEL
- OLE 操作Excel 祥解
- 通过ole 操作Excel
- OLE操作Excel
- OLE 操作Excel 祥解
- OLE操作EXCEL
- 用OLE操作Excel
- OLE 操作Excel 祥解
- OLE操作EXCEL
- ole excel操作
- ole操作excel参考
- ole操作excel参考
- OLE操作Excel(OLE/COM)
- MFC中使用OLE/COM操作EXCEL的方法
- 快速幂水题集
- hdu 4738 图的割边
- 第七话.
- Python特殊语法这之:filter、map、reduce、lambda(转自“玩玩python”)
- POJ2352树状数组
- 在工作者线程中操作Excel要初始化OLE
- ArchLinux蛋疼的wifi(无线)问题
- Python正则表达式集锦
- 腾讯大规模Hadoop集群实践
- Java反射机制创建对象
- Python编程中常用的12种基础知识总结
- uboot代码解析
- Python Import 详解
- Hog+svm行人检测